前言
本文介绍using关键字的使用
引入命名空间
《c++primer》一书中介绍了两种using引入命名空间
(1)命名空间using声明
using std::cout;
(2)引入命名空间
using namespace std;
很显然,第一种只能用于单个函数,第二种会将整个命名空间的函数都取消命名空间前缀处理。
那么思考这么一个问题,既然第二种能够针对整个命名空间的所有函数都不再需要命名空间前缀了,那么是不是不再需要第一种呢?答案当然是否定的。看代码
using namespace std;
using namespace deived;
namespace deived
{
void cout()
{
}
}
int main()
{
double* B = nullptr;
cout << "B的值是:" << B << endl;
}
这种情况,会发生什么问题?没错,编译器报错,指示“这是一个不明确的引用”,因为引入了多个命名空间,并且存在了同名函数,这就会造成二义性,编译器不知道这个cout指的是std::cout还是deived::cout,所以在可能引用多个命名空间的文件中尽量避免引入整个命名空间,另外,禁止在头文件中引入命名空间,因为头文件可能会被其他文件包含,再次导致我们上面说的二义性问题。
引用基类成员
有些时候,派生类想改变基类成员在本类表现出不同的封装级别,此时可以使用using来引入,但是需要注意的是,这种用法实际上违背了c++的封装性,除非特殊情况,否则不建议使用。
类型别名
c++11后支持的一个用法,作用和typedef完全一样,也是定义类型别名,语法如下:
using uInt unsigned Int;
好了,本文就到这里~