改善C++ 程序的150个建议学习之建议24:尽量采用C++风格的强制转型

建议24:尽量采用C++风格的强制转型
在建议11中,我们详细讲述了强制转型存在的一些问题,并建议在代码编写过程中尽量避免使用这个招人讨厌的东西。然而,正如哲学中所讲的一样:存在的即是合理的。强制转型肯定具有它存在的意义。在某些情形下我们必须求助于这个“讨厌鬼”,以帮助我们更好地完成程序设计。
比如,const属性的去除(请不要纠结于下面示例函数的“不良”设计):
class CStudent{};
const CStudent* GetCertainStudent(const std::string& name)
{
CStudent* p = new CStudent(name);
return p;
}
CStudent* p = GetCertainStudent("Li Lei");
在VC++下编译,编译器会报错:
error C2440: "初始化": 无法从"const CStudent *"转换为"CStudent *"
此时我们就只能求助于const_cast了:
CStudent* p = const_cast<CStudent*>(GetCertainStudent("Li Lei"));
这里需要提醒的是,不要随意去除变量的const属性,除非是经过深思熟虑后不得不这样做


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

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

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

请记住:如果实在不能避免,建议采用安全性较高的C++风格的强制转型形式。新风格更容易被注意,而且具有一定的针对性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值