C++编码军规(002):避免在C++中使用C形式的强制类型转换
来源:互联网 发布:能在淘宝买燕尾型材吗 编辑:程序博客网 时间:2024/05/21 05:19
军规 避免在C++中使用C形式的强制类型转换
Never use C-style casts within C++
解读
(1)何时需要强制类型转换
先看下面的例子
int ival;double dval;ival = ival * dval;
上述例子中,一个int整形数与一个double类型的浮点数相乘,按照C++内部默认的隐式的转换规则,编译器会首先将ival转换为double类型,然后与dval相乘,最后将相乘的结果(浮点)去掉浮点部分赋值给ival。在这个例子中,将int转换为double是没有必要的,因为3转换为3.000没有任何数值大小上面的改变,所以为了省略这一步骤,我们可以这么干:
int ival;doubel dval;ival = ival * (int)dval;
我们直接将dval强制转换为int类型后与ival相乘得到结果。这是一个需要做强制类型转换的比较简单的例子。
(2)C风格 VS C++风格
对于上面强制类型转换的例子,在C++中建议使用命名的强制类型转换,如ival = ival * static_cast<int>(dval)
, 尽管(int)dval
与static_cast<int>(dval)
在效果上是一样的,但C风格的类型转换可读性比较差,难以跟踪错误的转换。
此外,C++保留C风格的强制类型转换是为了兼容“在C++标准之前写的程序”,并保持与C语言的兼容性。在新的C++程序设计中我们应该采用新式的类型转换,如static_cast、const_cast以及reinterpret_cast.
(3)关于强制类型转换的深入思考
在C++ Primer中关于强制类型转换有这么一句话:设计合理的系统不应该频繁使用xx_cast强制类型转换,否则将意味着设计的缺陷。这句话告诉我们在使用xx_cast的时候要仔细思考一下是不是设计上有缺陷,不用xx_cast也能写出非常好的C++程序。当然这不是说用了xx_cast就表明程序的设计是糟糕的,有时候我们的确需要用到强制类型转换,否则C++标准就没必要设计xx_cast供我们使用了。一件事物的存在必然有它的必要,我们需要辩证地去看待这些问题。
(4)最佳实践
- 如果能避免使用强制类型转换就要避免
- 如果必须要用到强制类型转换使用C++风格的xx_cast代替旧式的C风格的类型转换。
- 在使用前多想思考一些是否设计上有缺陷
- C++编码军规(002):避免在C++中使用C形式的强制类型转换
- c++-----强制类型转换
- 【C++】强制类型转换
- C 强制类型转换
- C 强制类型转换
- C 强制类型转换
- C语言中强制类型转换总结
- C 语言中强制类型转换
- c中结构体指针的强制类型转换
- C语言中int到float的强制类型转换
- C语言中int到float的强制类型转换
- C语言中强制类型转换的总结
- 【C++】类型强制转换的注意事项
- 强制类型转换 (c++primer)
- C/C++强制类型转换。。。
- c/c++强制类型转换
- C语言类型强制转换
- c/c++强制类型转换
- Linux 安装JDK
- 运行caffe自带的两个简单例子
- struts2 1/24 基础配置
- rlwrap小插件
- v5.33Realease总结-折腾是风险与惊喜并存
- C++编码军规(002):避免在C++中使用C形式的强制类型转换
- Stream篇(—)
- angularjs-根据循环得到的数据中某个对象的属性来添加样式
- 项目总结
- View 的绘制流程
- 阻止浏览器记住密码功能干扰表单填充
- 查看和调试Qt源码
- Eclipse中把选中的代码变成全部大写或小写快捷键
- 简单实现验证码随机数(其实原理很简单就是一堆图片,然后点击随机改变图片的src属性)