using关键字的使用

在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等(如::),后面接变量时就不允许同作用域类再出现其他变量了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值