天天看点

如何使用C++的名字空间(namespace)名字空间

名字空间

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、匿名空间

​ 默认定义全局的标识符归属到匿名空间中,可以直接使用域限定符::直接访问匿名空间中的标识符

继续阅读