using关键字的使用

来源:互联网 发布:云计算平台建设方案 编辑:程序博客网 时间:2024/04/28 03:27

在using namespace std和使用Eigen等一些库的时候,经常看到使用using关键字。
using关键字在C++11之前和C++11之后的含义不一样。

using的作用是把后面的那个item放到当前的作用域中。
C++11之后

using的使用

1.引入命名空间

可以在当前函数中,或者当前文件中引用命名空间。

using namespace stdusing namespace cv;

2.定义别名

template<typename T>using Tlist = std::list<T>;
using Tlist = std::list<char>;
using df = void(*)();//等价于typedef void(*df)()

3.使用外部构造(变量和函数等)

全局作用域是::,如果不想使用本全局作用域的成员,可以使用using来使用其他作用域的成员。
比如在派生类中使用基类的成员;当派生类中函数隐藏了基类多个同名成员函数时,为了省事等,采用using关键字表示基类的成员函数不被隐藏。

#include <iostream>using namespace std;class Base{public:       void menfcn()  {     cout<<"Base function"<<endl;   }  void menfcn(int n)  {   cout<< cout<<"Base function with int"<<endl;   }};class Derived : Base{public:    using Base::menfcn;//using声明只能指定一个名字,不能带形参表    int menfcn(int){     cout<< cout<<"Derived function with int"<<endl; }};int main(){     Base b;   Derived d;     b.menfcn();     d.menfcn();//如果去掉Derived类中的using声明,会出现错误:error C2660: 'Derived::menfcn' : function does not take 0 arguments  std::cin.ignore(std::cin.gcount()+1);//清空缓冲区      std::cin.get();//暂停程序执行  }

具体参考:http://www.cnblogs.com/ustc11wj/archive/2012/08/11/2637316.html

4.引入外部类型

using typename A;

下次使用A定义变量时就不会出现错误了。

5.总结

using后面可以接类型,函数,变量,命名空间。接类型的话要加typename等(如::),后面接变量时就不允许同作用域类再出现其他变量了。

0 0
原创粉丝点击