尽量用C++的新式cast,而不是C的旧式cast

 
1.         C++的cast精准,而C的cast模糊
类型转换是经常出问题的地方,需要小心运用,尽量避免模糊的语义。
l C式的cast,形似type(…),与非cast形式的构造函数调用相同,不易区别。
l C式的cast功能强大,甚至可以将const变量转换成非const的变量,而调用者却毫无察觉,非常危险。
const int a = 123;
int b = (int)a; // Danger
 
 // 旧式cast转换函数指针类型。
typedef (*VoidFun)();
int IntFun();
VoidFun vf = VoidFun(IntFun); // Syntax right, but DANGER.
l C++的cast提供了四种类型的转换运算符,可以根据具体的需要选择,并且可以 精准地描述调用者的意图。比如const_cast就是为了去掉const或者volatile修饰符,dynamic_cast就是为了向下安全转换,static_cast为了替换原来的隐式转换;reinterpret_cast就是为了在不相关的类型间转换(包括不同类型的函数指针)。
 
2.         dynamic_cast的限制
l 仅在运行时cast。
l 仅应用于指针和引用的cast。
l 仅应用于拥有多态的对象。
 
3.         reinterpret_cast的使用注意事项
l reinterpret_cast可以在不相关的指针类型间转换。【static_cast不能做到。】
l reinterpret_cast通常用以转换函数指针的类型。【static_cast不能做到。】
l 转换函数指针的结果可能不正确,而且各个编译器的实现未必相同,所以reinterpret_cast转换函数指针不能在平台间移植。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值