c++ using使用
目录
- 一. using声明
- 1.using声明可使得指定的标识符可用。
- 2.using声明碰到函数重载
- 二. using编译指令
- 三. 命名空间使用
一. using声明
1.using声明可使得指定的标识符可用。
namespace A{int paramA = 20;int paramB = 30;void funcA(){ cout << "hello funcA" << endl; }void funcB(){ cout << "hello funcA" << endl; }
}void test(){//1. 通过命名空间域运算符cout << A::paramA << endl;A::funcA();//2. using声明using A::paramA;using A::funcA;cout << paramA << endl;//cout << paramB << endl; //不可直接访问funcA();//3. 同名冲突//int paramA = 20; //相同作用域注意同名冲突
}
2.using声明碰到函数重载
namespace A{void func(){}void func(int x){}int func(int x,int y){}
}
void test(){using A::func; //--------func();func(10);func(10, 20);
}
如果命名空间包含一组用相同名字重载的函数,using声明就声明了这个重载函数的所有集合。
二. using编译指令
using编译指令使整个命名空间标识符可用.
namespace A{int paramA = 20;int paramB = 30;void funcA(){ cout << "hello funcA" << endl; }void funcB(){ cout << "hello funcB" << endl; }
}void test01(){using namespace A;cout << paramA << endl;cout << paramB << endl;funcA();funcB();//不会产生二义性int paramA = 30;cout << paramA << endl; //30
}namespace B{int paramA = 20;int paramB = 30;void funcA(){ cout << "hello funcA" << endl; }void funcB(){ cout << "hello funcB" << endl; }
}void test02(){using namespace A;using namespace B;//二义性产生,不知道调用A还是B的paramA//cout << paramA << endl;
}
**注意:**使用using声明或using编译指令会增加命名冲突的可能性。也就是说,如果有名称空间,并在代码中使用作用域解析运算符,则不会出现二义性。
三. 命名空间使用
我们刚讲的一些东西一开始会觉得难一些,这些东西以后还是挺常用,只要理解了它们的工作机理,使用它们非常简单。
需要记住的关键问题是当引入一个全局的using编译指令时,就为该文件打开了该命名空间,它不会影响任何其他的文件,所以可以在每一个实现文件中调整对命名空间的控制。比如,如果发现某一个实现文件中有太多的using指令而产生的命名冲突,就要对该文件做个简单的改变,通过明确的限定或者using声明来消除名字冲突,这样不需要修改其他的实现文件。