名字空间
1、为什么需要名字空间
在项目中函数名、全局变量、结构、联合、枚举、宏等,非常有可能有命名冲突,而C++之父设计名字空间就是为了解决这些命名冲突,名字空间可以把这些命名划分到不同的逻辑空间中,从而解决命名冲突。
2、定义名字空间
namespace name
{
定义变量
定义函数
定义类、结构、联合、枚举
}
注意:名字空间可以重复,同名的名字空间会自动合并
#include <iostream>
namespace n1
{
int num = 10;
}
namespace n2
{
int num = 20;
}
namespace n1
{
const char* str="hehe";
}
int main()
{
std::cout << n2::str << std::endl;
}
3、使用名字空间
使用空间中的单个标识符,空间名::标识符 使用麻烦,但安全。
导入空间中的所有标识符,using namespace 空间名,虽然方便但依然有冲突的可能
4、名字空间的嵌套
名字空间的内部可以再定义名字空间,这种定义方式叫名字空间嵌套。
内层的标识符可以与外层的重名,内层的标识符会自动屏蔽外层的标识符。
多层的名字空间使用时要逐层分解。
#include <iostream>
using namespace std;
namespace n1
{
int num = 10;
namespace n2
{
int num = 20;
namespace n3
{
int num = 30;
}
}
}
int main()
{
cout << n1::n2::num << endl; //输出结果为20
}
使用多层名字空间为了精简长度可以取别名
namespace n123 = n1::n2::n3;
5、匿名空间
默认定义全局的标识符归属到匿名空间中,可以直接使用域限定符::直接访问匿名空间中的标识符