一 概述:
(一)命名空间功能:为防止名字冲突提供了更加可控的机制,命名空间能够划分全局命名空间,一个命名空间就是一个作用域。
(二)命名空间特性:
1.每个命名空间本身是一个作用域。
*命名空间中的实体称为命名命名空间成员,每个成员的名字必须引用该命名空间中的唯一实体。
*不同命名空间是不同作用域,所以可以具有同名成员。
2.命名空间可以是不连续的。
*与作用域不同,命名空间可以在几个分离的部分中定义(例如多个文件),命名空间由它的分离定义部分的总和构成,是累积的。
*一个命名空间的分离部分可以在不同文件中,在不同文件中的命名空间定义也是累积的。
*可以用分离的接口文件和实现文件构成命名空间:定义类的命名空间成员、以及作为类接口的一部分函数声明和对象声明,可以放在头文件中,使用命名空间成员的文件可以包含这些头文件;命名空间成员的定义可以放在单独的源文件中。
*全局作用域:定义在全局作用域的名字是定义在全局命名空间的。全局命名空间是隐式的,可以用作用域操作符引用全局命名空间的成员如:::member_name。
*命名空间可以在全局作用域或其他作用域内部定义,但不能在函数或类内部定义。
二 命名空间的使用:
(一)命名空间的定义:
*格式:namespace+命名空间名字+{},不要加分号;。
*命名空间的名字必须在定义命名空间的作用域中是唯一的。
(二)命名空间成员的定义:
*可以在命名空间内部直接定义。
*也可以在命名空间外部定义。格式:返回类型+命名空间名字::+函数名,类的成员函数类似。
(三)使用:
1.using声明:一次只引入一个命名空间成员。
*格式:using 命名空间名字::member;
*作用域:从using声明点开始,到包含该using声明的作用域的结尾。
*出现位置:全局作用域、局部作用域或者命名空间作用域中。类作用域中的using声明局限于被定义类的基类中定义的名字,但类成员函数的定义中可以使用其它。
2.using指示:使特定命名空间的所有名字可见。
*格式:using+namespace+命名空间名字。
*尽量少用,容易造成名字冲突;最好针对每一个名字用using声明。
3.命名空间别名:较短的同义词与命名空间名字关联。
*格式:namespace+命名空间别名+=+原来的命名空间名字+;。如:namespace lbj=lebron james;。