大型程序往往会使用多个独立开发的库,这些库又会定义大量全局名字,如类、函数和模板等。当应用程序用到多个供应商提供的库时,不可避免地会发生某些名字相互冲突的情况,多个库将名字放置在全局命名空间( 全局命名空间就是工程中没有在特定命名空间中定义的各类名字的集合,一般我们写程序时不加命名空间时,就是在全局命名空间中定义了名字)中将引发命名空间污染。
命名空间为防止名字冲突提供了更加可控的机制。命名空间分割了全局命名空间,每个命名空间都是一个作用域,两个不同的命名空间中的名字不会发生冲突。
命名空间可以不连续:
命名空间的定义可以不连续的特性使得我们可以将几个独立的接口和实现文件组成一个命名空间。
//类声明
namespace myspace
{
int demo;
class test
{
public:
test();
private:
int a;
}
}
//类定义
#include "test.h";
namespace myspace
{
demo=100;
test::test(int A)
{
this->a = A;
}
}
命名空间中成员的访问:
命名空间::成员名字;如:myspace::demo=1000; myspace::test *t=new myspace::test(demo);
嵌套命名空间:
一个命名空间中可以嵌套多个命名空间:
访问格式:
命名空间::嵌套命名空间::成员名字;
内联命名空间:C++11引入的新标准, 即该嵌套命名空间前面有一个inline关键字
作用:在访问该嵌套命名空间中的名字时,通过外层命名空间的名字就可以直接访问它。
访问格式:
外层命名空间::成员名字;
格式:
namespace nsnd
{
inline namespace nsp
{
int a;
}
}
nsnd::a;