Guru of the Week 条款17:转型 (转)

Guru of the Week 条款17:转型 (转)[@more@]

GotW #17 CastsXML:namespace prefix = o ns = "urn:schemas-microsoft-com:Office:office" />

著者:Herb Sutter

翻译:K ][ N G of @rk™

[声明]:本文内容取自www.gotw.ca网站上的Guru of the Week栏目,其著作权归原著者本人所有。译者kingofark在未经原著者本人同意的情况下翻译本文。本翻译内容仅供自学和参考用,请所有阅读过本文的人不要擅自转载、传播本翻译内容;下载本翻译内容的人请在阅读浏览后,立即删除其备份。译者kingofark对违反上述两条原则的人不负任何责任。特此声明。

 

Revision 1.0

 

Guru of the Week 条款17:转型

 

难度:6 / 10

 

(你对C++转型了解多少?适当的使用它可以极大的提高代码的可靠性。)

 

 

[问题]

标准C++中新风格的转型与旧风格的C转型相比,具有更强大的功能和安全性。你对它了解多少?本条款中使用下列类和全局变量:

  class  A  { /*...*/ };

 
 

  class  B : virtual A { /*...*/ };

 
 

  struct C : A  { /*...*/ };

 
 

  struct D : B, C  { /*...*/ };

 
 

  A a1; B b1; C c1; D d1;

 
 

  const A a2;

 
 

  const A& ra1 = a1;

 
 

  const A& ra2 = a2;

 
 

  char c;

 
 

1.  下列哪一种新风格的转型不能与C中的转型相对应?

const_cast

dynamic_cast

reinterpret_cast

static_cast

 

2.  对于下列每一个C中的转型语句,写出相应的新风格转型语句。其中哪一个语句如果不以新风格编写的话就是不正确的?

  void f() {

 
 

  A* pa; B* pb; C* pc;

 
 

  pa = (A*)&ra1;

 
 

  pa = (A*)&a2;

 
 

  pb = (B*)&c1;

 
 

  pc = (C*)&d1;

 
 

  }

 
 

3.  评判下列每一条C++转型语句的编写风格和正确性。

  void g() {

 
 

  unsigned char* puc = static_cast(&c);

 
 

  signed char* psc = static_cast(&c);

 
 

  void* pv = static_cast(&b1);

 
 

  B* pb1 = static_cast(pv);

  B* pb2 = static_cast(&b1);

  A* pa1 = const_cast(&ra1);

 
   
 

  A* pa2 = const_cast

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

 
  
 

转载于:http://blog.itpub.net/10752043/viewspace-991202/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值