命名空间

C++提供了定义一个声明区域来创建命名的名称空间功能,在一个命名空间中的名称不会与另外一命名空间中的相同名称发生冲突。命名空间可以是全局或者嵌套在另一个命名空间中,但是不能位于代码块中。以下定义了一个命名空间。

namespace Galaxy {
    int stars;
    void travel();
}

namespace Orion {
    int stars;
    void travel();
}

上面这两个命名空间都具有相同的内容声明,但是它们之间并不会发生冲突。

要访问一个命名空间中的名称,需要使用作用域解析操作符::,例如Galaxy::travel()

此外还可以使用using来简化命名空间的使用。using既可以将指定名称加入全局空间,也可以将整个命名空间加入全局空间。可见以下示例。

// 仅引入指定名称
using Galaxy::travel();
// 在后续程序中可以直接调用travel
travel();

// 引入整个命名空间
using namespace Galaxy;
// 在后续程序中将可以不使用作用域解析操作符而直接调用被引入的命名空间中的全部内容
travel();

Tip

使用using引入指定内容或者全部命名空间内容之后,全局中的同名内容将会被覆盖。