在c++中,名称可以是变量、函数、结构、枚举、类以及类和结构的成员。当随着项目的增大,名称相互冲突的可能性也将增加。使用多个厂商的库类时,可能导致名称冲突。例如两个库都可能定义了名为list、tree和node的类,单定义方式不兼容。用户可能希望使用一个库的list,而使用另一个库的tree类。这种冲突问题称为名称空间问题。
1、传统的c++名称空间
声明区域:声明区域是可以在其中进行声明的区域。例如,可以在函数外面声明全局变量,对于这种变量,其声明区域为其声明所在的文件。对于在函数中声明的变量,其声明区域为其生在所在的代码块。
作用域:变量的潜在作用域从声明点开始,到其声明区域结尾。因此潜在作用域比声明区域小,这是由于变量必须定义后才能使用。
c++关于全局变量和局部变量的规则定义了一种名称控件层次。每个声明区域都可以声明名称,这些名称独立于在其他声明区域中声明的名称。在一个函数中声明的局部变量不会在另一个函数中声明的局部变量发生冲突。
2.新的名称空间特性。
c++新增了这样一种功能,既通过定义一种新的声明区域来创建命名的名称控件,这样做的目的之一是提供一个声明名称的区域。一个名空间中的名称不会与另外一个名称空间的相同名称发生冲突,同时允许程序的其他部分使用该名称空间中声明的东西。