命名空间是C++非常重要的概念,本文就以实例形式对其进行深入分析,具体内容如下:
通常来说,在C++中,命名空间(namespace)的目的是为了防止名字冲突。每个命名空间是一个作用域,在所有命名空间之外,还存在一个全局命名空间(global namespace),全局命名空间以隐式的方式声明,它并没有名字。在命名空间机制中,原来的全局变量,就是位于全局命名空间中(可以用::member的形式表示)。
一、定义命名空间
1、每个命名空间都是一个作用域
和其他作用域类似,在命名空间中的每个名字必须表示唯一实体,而在不同命名空间中,可以有相同名字的成员。
2、命名空间可以是不连续的
命名空间可以定义在几个不同的部分:
namespace nsp {
/* …… */
} // 命名空间作用域后面无须分号
如果之前没有名为nsp的命名空间定义,则上述代码创建一个新的命名空间;否则,上述代码打开已经存在的命名空间添加一些新的成员。
3、命名空间是可以嵌套的
嵌套的命名空间是指定义在其他命名空间中的命名空间。嵌套的命名空间是一个嵌套的作用域,内层命名空间声明的名字将隐藏外层命名空间声明的同名成员:
int x = 20;
namespace outer {
int x = 10;
namespace inner {
int z = x;
}
}
int main()
{
std::cout << outer::inner::z; // 输出10
return 0;
}
注意,通常我们不把#include头文件放在命名空间内部。
4、未命名的命名空间
未命名的命名空间(unnamed namespace)是指关键字namespace后紧跟花括号括起来的一系列声明语句。未命名的命名空间中定义的变量拥有静态生命周期:它们在第一次使用前创建,并且直到程序结束才销毁。在标准C++引入命名空间的概念之前,程序需要将名字声明成static以使其对于整个文件有效,但是,现在在文件中进行静态声明的做法已经被C++标准取消了,取而代之的是使用未命名的命名空间。










