03 - 名称空间
名称空间
C++经常需要多个团队合作完成大型项目,多个团队就常常出现起名重复的问题,而名称空间就是用来处理不同代码段之间的名称冲突问题。
将某段代码加入名称空间,可用namespace
块将其包含:
namespace mycode {
void foo()
{
std::cout << "my code!" << std::endl;
}
}
如果想要使用位于mycode
的foo()
,可以这样调用它:
mycode::foo();
using关键字
当然,上述的写法可能太过麻烦(重复次数过多的话)。可以使用using
关键字来简化名称空间,这是它被设计出来的目的之一。
using
关键字在命名空间方面主要有两种用法:
using std::cout
:这样,就可以直接用cout
了。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高级编程