一些运用名称空间的指导原则:
- 使用在已命名的名称空间中声明的变量,而不是使用外部全局变量。
- 使用在已命名的名称空间中声明的变量,而不是使用静态全局变量。
- 如果开发了一个函数库或类库,将其放在一个名称空间中。事实上,C++当前提倡将标准函数库放在名称空间std中,这种做法扩展到了来自C语言中的函数。
- 仅将编译指令using作为一种将旧代码转换为使用名称空间的权宜之计。
- 不要在头文件中使用使用using编译指令。这样做掩盖了要让哪些名称可用;另外,包含头文件的顺序可能影响程序的行为。如果非要使用编译指令using,应将其放在所有处理器编译指令#include之后。
- 导入名称时,首先使用作用域解析运算符或using声明的方法。
- 对于using声明,首先将其作用域设置为局部而不是全局。
使用名称空间的主旨是简化大型编程项目的管理工作。对于简单程序,使用using指令也不是不可取的。
名称空间允许定义一个可在其中声明标识符的命名区域。这样做的目的是减少名称冲突,尤其当程序非常大,并使用多个厂商的代码时。可以通过使用作用域解析运算符、using声明或using编译指令,来使名称空间中的标识符可用。
名称空间可以是全局的,也可以位于另一个名称空间中,但不能位于代码块中。因此,在默认情况下,在名称空间中声明的名称的链接性为外部的(除非它引用的常量)。
除了用户定义的名称空间外,还存在另一个名称空间------全局名称空间。它对应于文件级声明区域,因此全局变量现在被描述为位于全局名称空间中。
namespace C{
char * name;
void printf();
int foobar;
}
namespace Cplus{
string name;
int foobar;
}
C::printf();
Cplus::name = C::name;