名称空间
名称空间#
- 在c++中使用多个厂商的类库时,可能导致名称冲突。
- 传统c++名称空间
- 声明区域。可以在其中进行声明的区域。
- 潜在作用域。变量的潜在作用域从声明点开始。到其声明区域的结尾。
- 新的名称空间特性
- c++新增了这样一种功能,即通过定义一种新的声明区域来创建命名的名称空间。
- 允许程序的其他部分使用该名称空间中声明的东西。
namespace Yang { double d; int a; void fun(); }
- 名称空间可以是全局的,也可以位于另一个名称空间中。但不能位于代码块中。
- 在默认情况下,名称空间中声明的名称的链接性为外部的。(除非引用了常量)
- 除了用户定义的名称空间外,还有全局名称空间。它对应于文件级声明区域。
- 名称空间是开放的,可以将名称加入到已有的名称空间中。
- namespace Yang{char c;}将名称c添加到名称空间中。
- 访问位于名称空间中的名称。通过作用域解析运算符::使用名称空间来限定该名称
- Yang::c = 'a';
- Yang::fun();
- using声明和using编译指令
- using声明使特定的标识符可用。
- using编译指令使整个名称空间可用。
- 使用using声明比using编译指令更安全。
- 可以使用嵌套式名称空间来创建一个包含常用using声明的名称空间。
- 未命名的名称空间。
- 只能在该文件中使用。
- 提供了链接性为内部的静态变量的替代品。
- 名称空间编程理念
- 使用已命名的名称空间中声明的变量,而不是使用外部全局变量。
- 使用已命名的名称空间中声明的变量,而不是使用静态全局变量。
- 如果开发了一个函数库或类库,将其放到一个名称空间中。
- 仅将编译指令using作为一种将旧代码转换为使用名称空间的权宜之计。
- 不要再头文件中使用using编译指令。导入名称时首选使用作用域解析运算符或䍚声明的方法。
- 对于using声明,首选将其作用域设置为局部而不是全局。