设为首页 加入收藏

TOP

建议24:尽量采用C++风格的强制转型
2013-10-07 14:48:38 来源: 作者: 【 】 浏览:69
Tags:建议 尽量 采用 风格 强制 转型

建议24:尽量采用C++(www.cppentry.com)风格的强制转型

在建议11中,我们详细讲述了强制转型存在的一些问题,并建议在代码编写过程中尽量避免使用这个招人讨厌的东西。然而,正如哲学中所讲的一样:存在的即是合理的。强制转型肯定具有它存在的意义。在某些情形下我们必须求助于这个“讨厌鬼”,以帮助我们更好地完成程序设计。

比如,const属性的去除(请不要纠结于下面示例函数的“不良”设计):

  1. class CStudent{};  
  2. const CStudent* GetCertainStudent(const std::string& name)  
  3. {  
  4.      CStudent* p = new CStudent(name);  
  5.      return p;  
  6. }  
  7.  
  8. CStudent* p = GetCertainStudent("Li Lei"); 

在VC++(www.cppentry.com)下编译,编译器会报错:
  1. error C2440: "初始化": 无法从"const CStudent *"转换为"CStudent *" 

此时我们就只能求助于const_cast了:
  1. CStudent* p = const_cast<CStudent*>(GetCertainStudent("Li Lei")); 

这里需要提醒的是,不要随意去除变量的const属性,除非是经过深思熟虑后不得不这样做。

在C/C++(www.cppentry.com)编程(www.cppentry.com)中,新旧两种风格的强制转型同时存在。当强制转型已成为不可避免的定局时,安全性相对高的C++(www.cppentry.com)风格的强制转型更为可取。

首先,新风格的强制转型不再像C风格的强制转型那样简单粗暴,在代码中它们更容易识别,更容易找到这些类型系统破坏者的藏匿之处。

其次,新风格的强制转型针对性更强,它针对特定的目的进行了特别的设计。如果对这些特别设计的理解不是很清晰,请返回去看看建议11。这样能让程序员更清晰地了解强制转型的目的,同时使利用编译器诊断使用错误成为可能。

请记住:

如果实在不能避免,建议采用安全性较高的C++(www.cppentry.com)风格的强制转型形式。新风格更容易被注意,而且具有一定的针对性。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇建议23:尽量使用C++标准的iostre.. 下一篇建议25:尽量用const、enum、inli..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: