命名空间的含义
使用namespace{}命名的一段内存区域,在区域内的函数、类被限制于该命名空间中使用;
命名空间的使用方法
1、using编译指令
这种方法是非限定名称引用,在头文件中使用using namespace xxx的方法,把空间中的所有实体全部引入,访问空间的实体时就可以将空间中的实体当成通用成员使用;例如 using namespace std ,STL库中的cout cin string map等等所有成员都可以直接使用;这种用法要求使用者对空间中的成员熟悉,否则在定义新的函数或者类时容易与空间中的实体重名,导致冲突;
一般而言大型程序不建议这种用法,初学的小程序为了节约时间可以直接这么用;
2、using声明机制
限定名称的引用,在头文件或者文件开头用using::xxx::xx声明,后续使用时可直接使用,如:
using::std::cout;
using::std::cin;
using::std::string;
……
好处是只将需要使用的实体引入,可以避免重名;
3、作用域限定符 ::符号
完全限定名称的用法,在使用的语句中将命名空间名称、成员名写出,指定完整的引用路径:
std::cout << "hello c++ " << std::endl;
好处是即用即写,成员的归属一目了然,不会引起重名冲突,坏处是需要多次调用时比较繁琐;
匿名空间
C++中,未指定的空间称为匿名空间,匿名空间是为了兼容C编程而存在的,由于C中不存在命名空间的说法,所以未指定空间的变量可以认为都在匿名空间中
实际使用时,在实体前加上::表示访问的是匿名空间,如:
::number=0; //访问全局变量
::strlen(charPtr) //访问全局函数
命名空间是一个黑洞,在工程中可以在若干个文件或者一个文件的多处出现,并可无限向里面堆内容。