名称空间

名称空间#

  • 在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声明,首选将其作用域设置为局部而不是全局。
posted @ 2019-12-02 23:08  yangzixiongh  阅读(147)  评论(0编辑  收藏  举报