Namespace

嵌套名字空间

  • 名字空间可以嵌套,嵌套名字空间形成嵌套域
  • 注意同样的名字空间定义可以出现在程序多处,以向同一个名字空间中增加声明或定义
    namespace A {
      int x;
    }
    
    namespace A {
      int y;
    }
    
    int main() {
      A::x;
      A::y;
    }
    
  • C++17开始可以简化嵌套名字空间的定义
    namespace A {
      int x;
    }
    
    namespace A::B {  // C++17才支持这种写法
      int y;
    }
    
    int main() {
      A::x;
      A::B::y;
    }
    

匿名名字空间

  • 用于构造仅翻译单元可见的内容
    // main.cc
    namespace {
      int y;
    }
    
    int main() {
    }
    
    // source.cc
    namespace {
      int y;  // 这里的y和mian中的y都是对各自的cc文件可见,不冲突,在内存中是两个不同的地址;如果去掉匿名空间,链接的时候就会报错
    }
    
  • 想要构造仅翻译单元可见的内容还可以用static代替
    static int x;  // 这里的xyz都是仅对当前翻译单元可见
    static int y;  // 但这样的写法太啰嗦,每个变量都要写一遍static
    static int z;
    
  • 匿名名字空间可以作为嵌套空间
    namespace A {
      namespace {  // 这里加匿名空间意义是让A::x这个对象只在当前翻译单元可见,在其他文件访问不到A::x
        int x;
      }
    }
    

Search

    欢迎添加我的微信

    闷骚的程序员

    Table of Contents