C++中Using关键词的三种应用

  1. 引入单个名称
  1. 将某个单独名字引入到当前域中。不再需要使用作用域限定符::

例如:

using std::string;

string s = “hello,world”;

  1. using声明可以改变派生类对父类成员的访问控制。

例如:

class Base{

protected:

       int n1;

       int n2;

};

class Derived: private Base{   //私有继承

public:

       using Base::n1; //在当前域中引入了父类的保护成员,在当前域中可以访问。

};

class DerivedDouble: public Derived {   //公有继承,所以Derived的子类还是能够访问n1

};

int main() {

       Derived d;

       DerivedDouble dd;

       d.n1 = 1;

       d.n2 = 2;         //错误,n2是Base类的私有变量,不能访问

       dd. n1 = 3;

       std::cout << d.n1 << std::endl;

       return 0;

}

  1. 引入命名空间,语法Using XXX

常见的例子是:

using namespace std; //将我们常用的std命名空间展开,以后cout, endl等就不需要再用std::来修饰。

  1. 类型重定义,相当于typedef

语法:

using alias = typename;//用别名替换原始类型

新语法:

using ULL = unsigned long long;

using func = void(*) (int, int);

上面两个C++语句对应的老式语法如下:

typedef unsigned long long ULL;

typedef void(*func)(int, int);

typedef存在一些限制。当我们想实现一个将int映射到任意类型的模板。类似如下功能:

typedef std::map<int, int> mapIntInt;

typedef std::map<int, bool> mapIntBool;

typedef std::map<int, std::string> mapIntString;

……

在老式C++98/03中,需要如下实现:

template <class Val>

struct mapInt{

       typedef std::map<int ,Val> type;

};

int main(){

       mapInt<int>::type intmap;

       mapInt<bool>::type boolmap;

       mapInt<std::string>::type stringmap;

       return 0;

}

在C++11中,可以直接使用using重新定义模板。

template <class Val>

using mapInt =  std::map<int , Val>;

int main()

{

       mapInt<int> intmap;

       mapInt<bool> boolmap;

       mapInt<std::string> stringmap;

       return 0;

}

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值