using声明和using编译指令
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
namespace YuanShen
{
int HuTao = 100;
}
void func01()
{
int HuTao = 648;
//using 声明 注意避免二义性问题
//写了using声明后 下面这行代码说明以后看到的HuTao是应是用YuanShen下的
//但是,编译器又有就近原则
//这个就造成了冲突,计算机不知道使用YuanShen下的HuTao还是就近用最近的HuTao
//这就是二义性
//using YuanShen::HuTao;
cout << HuTao << endl;
}
//using编译指令
namespace YuanShen
{
int ZhongLi =100;
}
void func02()
{
int ZhongLi = 648;
//using编译指令
using namespace YuanShen; //打开原神这个房间,这里只是打开了房间,但是并没用直接调用
cout << ZhongLi<< endl;//因此这个里按照就近原则,输入的应该是648.
// 注:当打开多个房间时,也应该注意二义性。
}
int main(){
func01();
func02();
system("pause");
return EXIT_SUCCESS;
}
注意:使用using声明或using编译指令会增加命名冲突的可能性。也就是说,如果有名称空间,并在代码中使用作用域解析运算符,则不会出现二义性。
命名空间使用
需要记住的关键问题是当引入一个全局的using编译指令时,就为该文件打开了该命名空间,它不会影响任何其他的文件,所以可以在每一个实现文件中调整对命名空间的控制。比如,如果发现某一个实现文件中有太多的using指令而产生的命名冲突,就要对该文件做个简单的改变,通过明确的限定或者using声明来消除名字冲突,这样不需要修改其他的实现文件。