1、命名空间定义以关键字namespace开始,后接命名空间的名字。
2、命名空间可以在全局作用域或其他作用域内部定义,但不能在函数或类内部定义。
3、命名空间作用域不能以分号结束。
4、using声明:
如:using cplusplus_primer::Query;
using声明之后,程序可以无须cplusplus_primer限定符而直接使用名字Query
5、命名空间可以是不连续的。一个命名空间的分离部分可以分散在多个文件中,在不同文本文件中的命名空间定义也是积累的。
6、可以在命名空间定义的外部定义命名空间成员,用类似于在类外部定义类成员的方式。
7、定义在全局作用域的名字(在任意类、函数或命名空间外部声明的名字)是定义在全局命名空间中的。::member_name引用全局命名空间的成员。
8、嵌套命名空间:外围命名空间中声明的名字被嵌套命名空间中同一名字的声明所屏蔽。
9、未命名的命名空间:命名空间可以是未命名的,未命名的命名空间在定义时没有给定名字。未命名的命名空间以关键字namespace开头,接着关键字namespace后面的是由花括号定界的声明块。未命名的命名空间的定义局部于特定文件,从不跨越多个文本文件。未命名的命名空间中定义的名字可直接使用,未命名的命名空间中的名字必须与全局作用域中定义的名字不同。
10、命名空间别名:可用命名空间别名将较短的同义词与命名空间名字相关联。
如:namespace cplusplus_primer{ /* ... */ }
namespace primer = cplusplus_primer;
命名空间别名声明以关键字namespace开头,接(较短的)命名空间别名名字,再接=,再接原来的命名空间名字和分号。
11、using指示:using指示以关键字using开头,后接关键字namespace,再接命名空间名字。using指示使得特定命名空间的所有名字可见,没有限制。
12、模板的显式特化必须在定义通用模板的命名空间中声明,否则,该特化将与它所特化的模板不同名。