03 - 名称空间

名称空间

C++经常需要多个团队合作完成大型项目,多个团队就常常出现起名重复的问题,而名称空间就是用来处理不同代码段之间的名称冲突问题。

将某段代码加入名称空间,可用namespace块将其包含:

namespace mycode {
    void foo()
    {
        std::cout << "my code!" << std::endl;
    }
}

如果想要使用位于mycodefoo(),可以这样调用它:

mycode::foo();

using关键字

当然,上述的写法可能太过麻烦(重复次数过多的话)。可以使用using关键字来简化名称空间,这是它被设计出来的目的之一。

using关键字在命名空间方面主要有两种用法:

  1. using std::cout:这样,就可以直接用cout了。
  2. using namespace std:这样,就能直接使用C++头文件中的所有变量了。需要注意的是,头文件中一定不能使用using关键字,这样会造成一定的混乱,导致名称空间被污染。

嵌套的名称空间

在C++17之前,嵌套名称空间必须按照如下格式编写:

namespace MyLib {
    namespace Net {
        namespace FTP {
            /* ...... */
        }
    }
}

这样看起来太臃肿了,因此,C++17支持如下紧凑的写法:

namespace MyLib::Net::FTP {
    /* ...... */
}

名称空间别名

可以给名称空间起别名,避免太长了:

namespace myFTP = MyLib::Net::FTP;

参考资料

  • 飘零的落花 - 现代C++详解
  • C++20高级编程