前言
当随着C++项目项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的类库时,可能导致名称冲突。例如,两个类库可能都定义了名为List, Tree和Node的类,但定义的方式不兼容。用户希望使用其中一个库的List类,而使用另一个库的Tree类。这种冲突就被称为名称空间问题。
A demo for namespace
namespace Jack {
double pail; // 变量声明
void fetch; // 函数原型
int pal; // 变量声明
struct Well { ... }; // 结构体声明
}
创建名称空间的关键字是namespace,但是需要注意:
- 名称空间可以是全局的,也可以位于另一个名称空间中(名称空间的嵌套),但是不能位于代码块中。因此,在默认情况下,在名称空间中声明的名称的链接性为外部的。
- 除了用户自己定义的名称空间外,还存在一个全局名称空间(global namespace)。它对应于文件级声明区域,因此前面所说的全局变量现在被描述为位于全局名称空间中。
- 任何名称空间中的名称都不会与其它名称空间中的名称发生冲突。
- 名称空间是开放的(open),即可以把名称加入到已有的名称空间中。例如,下面的代码可以将名称goose加入到Jack已有的名称列表中:
namespace Jack { char * goose(const char *); }
<