什么是名称空间

C++名称空间是 C++实体(函数,类,变量)的集合,其名称以名称空间的名称为前缀。在命名空间中编写代码时,属于该命名空间的命名实体不需要以命名空间名称为前缀,但是在其外部的实体必须使用完全限定名称。完全限定名称的格式为 <namespace>::<entity>。例:

namespace Example
{
  const int test = 5;

  const int test2 = test + 12; //Works within `Example` namespace
}

const int test3 = test + 3; //Fails; `test` not found outside of namespace.

const int test3 = Example::test + 3; //Works; fully qualified name used.

命名空间对于将相关定义分组在一起非常有用。以购物中心为例。通常,购物中心被分成几个商店,每个商店销售来自特定类别的商品。一家商店可能会销售电子产品,另一家商店可能会销售鞋子商店类型中的这些逻辑分隔有助于购物者找到他们正在寻找的商品。命名空间帮助 c ++程序员(如购物者)通过以逻辑方式组织它们来查找他们正在寻找的函数,类和变量。例:

namespace Electronics
{
    int TotalStock;
    class Headphones
    {
        // Description of a Headphone (color, brand, model number, etc.)
    };
    class Television
    {
        // Description of a Television (color, brand, model number, etc.)
    };
}

namespace Shoes
{
    int TotalStock;
    class Sandal
    {
        // Description of a Sandal (color, brand, model number, etc.)
    };
    class Slipper
    {
        // Description of a Slipper (color, brand, model number, etc.)
    };
}

预定义了一个名称空间,它是没有名称的全局名称空间,但可以用::表示。例:

void bar() {
    // defined in global namespace
}
namespace foo {
    void bar() {
        // defined in namespace foo
    }
    void barbar() {
        bar();   // calls foo::bar()
        ::bar(); // calls bar() defined in global namespace
    }
}