using 关键字在 C++ 中的几种用法

using 关键字在 C++ 中的几种用法

https://blog.wandoer.com/coding/using-%E5%85%B3%E9%94%AE%E5%AD%97%E5%9C%A8-c-%E4%B8%AD%E7%9A%84%E5%87%A0%E7%A7%8D%E7%94%A8%E6%B3%95.htm#1_using_%E5%A3%B0%E6%98%8E

对C++中 using关键字的几种用法的总结:

1. using 声明

using 声明 (using declaration) 是将命名空间中单个名字注入到当前作用域的机制,使得在当前作用域下访问另一个作用域下的成员时无需使用限定符 ::

// ...

{

using std::map

map the_map; //ok

}

map the_map2; //error

using 声明将其它 namespace 的成员引入本命名空间的 当前作用域 (包括其嵌套作用域) 。一个 using 声明一次只引入一个命名空间成员,它使得无论程序中使用哪些名字,都非常准确。利用 using 声明,可以改变派生类对父类成员的访问控制:

class Base{

protected:

int bn1;

int bn2;

};

class Derived: private Base{

public:

using Base::bn1;

};

class DerivedAgain: public Derived{

};

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<

return 0;

}

尽管 Derived 对 base 是私有继承,但通过 using 声明,我们还是可以在 Derived 中访问其成员,且后续的继承同样不受 private 限定的影响。

2. using 指示 (引入命名空间)

using 指示 (using directive) 是使一个命名空间中的 所有 名字都在该作用域中可见的机制。这是最常用的方式了。需要注意的是命名冲突问题。

#include

namespace n1{

int n1_member = 10;

int m = 11;

}

int m = 12;

int main(){

using namespace n1;

std::cout<

//std::cout<

std::cout<<::m<

int m = 13; //ok, 局部变量屏蔽命名空间变量

std::cout<

return 0;

}

Notice: 尽管 using指示很方便,但在实际工作中应该尽量避免:它一下子将另一个 namespace 中的成员全部引入了,一不小心就会出现命名空间污染问题。

3. 类型重定义,取代 typedef

using alias = typename

这是 C++11 中的新用法,比 typedef 更能表达别名的定义。

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

//typedef void (*fun)(int, int); //与上一句等价

using int16 = short;

//typedef short int16; //与上一句等价

int main(){

std::cout<

}

在 C++98/03 中 ,typedef 重定义有一些限制,比如,模板。我们想实现这样一个模板:将一个 int 映射到任意类型,类似于我们想表达这种效果:

typedef std::map map_int_t;

typedef std::map map_str_t;

typedef std::map map_b_t;

//... Others

我们在 C++98/03 中必须这样写:

template

struct int_map{

typedef std::map type;

};

int main(){

int_map::type imap;

return 0;

}

在C++11 中,我们可以使用 using 重定义模板

template

using int_map_t = std::map;

int main(){

int_map_t imap;

return 0;

}

相关推荐

在JSP中使用会话session
365bet官网开户

在JSP中使用会话session

📅 06-30 👁️ 2060
小身材“大”惊喜 中兴九城“球迷棒”评测
bt365全程担保

小身材“大”惊喜 中兴九城“球迷棒”评测

📅 07-02 👁️ 6435
NEIWAI 内外女性内衣怎么样 品牌介绍
bt365全程担保

NEIWAI 内外女性内衣怎么样 品牌介绍

📅 06-30 👁️ 8468
告别卡顿,轻松关闭Windows超线程:一招解决多核处理器困扰!
App Store预览
365bet官网开户

App Store预览

📅 06-29 👁️ 8074
苹果手机5s修理多少钱
365bet官网开户

苹果手机5s修理多少钱

📅 06-28 👁️ 5384