目录
1. using声明(引入单个名称)
2. using指示(引入命名空间)
3. 类型重定义(替代typedef)
总结
1. using声明(引入单个名称)
using声明是将命名空间中某个名字单独引入到当前作用域。这使得我们在当前作用域下可以直接使用该名字而无需使用作用域限定符::。
using std::string;string s = "123";using声明可以改变派生类对父类成员的访问控制。
class Base{protected:int bn1;int bn2;};
class Derived: private Base{ //私有继承public:using Base::bn1; //在当前作用域中引入了父类的保护成员, 在当前作用域中可以访问};
class DerivedAgain: public Derived{ //在Derived的子类中仍然可以访问bn1};
int main(){Derived d;DerivedAgain da;d.bn1 = 1;d.bn2 = 2; //error, 'bn2' is a private member of 'Base'da.bn1 = 3; //ok std::cout<
2. using指示(引入命名空间)
using指示就是将一个命名空间中的所有名字全部引入到当前作用域(将命名空间在当前作用域展开)。可能会存在命名冲突的问题。
using namespace std; //我们常用的std命名空间展开
3. 类型重定义(替代typedef)
语法:using alias = typename;//使用别名去替代原始类型(重命名)在C++11中,我们可以使用这样的语法来替代typedef的功能了。
using ULL = unsigned long long; //typedef unsigned long long ULL;using func = void(*)(int, int); //typedef void(*func)(int, int);在Effective Modern C++中的条款9说明了,使用using替代typedef。
typedef存在一些限制。
当我们想实现一个这样的模板: 将一个int映射到任意类型的模板。类似于下面的功能:typedef std::map
在C++98/03中,我们必须这样写才能实现:template
int main(){mapInt
template
int main(){mapInt
您可能感兴趣的文章:C++11中使用using的方法C++using声明和using编译指令C++ 命名空间 using声明使用示例详解C++ using 编译指令与名称冲突问题
