Effective C++ 条款27 尽量少做转型操作
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Effective C++ 条款27 尽量少做转型操作,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1104字,纯文字阅读大概需要2分钟。
内容图文
![Effective C++ 条款27 尽量少做转型操作](/upload/InfoBanner/zyjiaocheng/1308/5c6849dcd566435ba95c6d852f057c4b.jpg)
1. 转型语法有三种,
C风格转型:(T)expression
函数风格转型:T(expression)
两种方式除了小括号位置不同没有差别,可以称为"旧式转型".
C++提供四种新式转型:
const_cast<T>(expression):
将const变量引用或指针转为非const引用或指针,移除变量的常量特性.T必须是指针或引用.
注:虽然经const_cast转型后的变量可以被更改,但由于"常量折叠"(c++编译器在编译时将const 变量替换为对应常量),原变量的值表现出未更改的性质(只有内置类型才会有这种现象).
reinterpret_cast<T>(expression):
变量二进制位层次上的重新解释,并没有对变量的二进制储存方式进行更改.T必须是指针,引用或算术类型.
dynamic_cast<T>(expression):
在执行期进行多态类(有虚函数)之间的转换,用于运行时类型识别.T必须是指针或引用,expression必须返回多态类类型.
如果T是指针,转换失败时会返回NULL,如果T是引用,转换失败时会抛出异常.
static_cast<T>(expression):
可以执行大多数类型的转换,但与const_cast类型相比,static_cast不能去除const或volatile属性,与dynamic_cast相比不支持运行时类型识别,与reinterpret_cast相比不是位层次上的重新解释,而是对位进行改变后的重新编码.
2. static_cast与返回值的函数类似,返回的是一个临时副本,例如:
int a; static_cast<double>(a)=2.0;
并不会改变a的值,因此除非像dynamic_cast,const_cast一样转为指针和引用,否则不要对转换后的对象进行操作.
此外,dynamic_cast在成功进行downcast或upcast时会进行指针地址的重定向(这由C++面向对象模型决定),因此dynamic_cast与static_cast在进行类类型之间的转换上操作也有所不同.
3. 尽量使用C++的新式转型操作取代C的旧式转型,前者分类更加精确,可以明确指出转型意图,便于找出错误.
如果可以,尽量避免转型操作,特别是避免像dynamic_cast这种运行时进行类型识别而导致效率低的操作;
原文:http://www.cnblogs.com/reasno/p/4771836.html
内容总结
以上是互联网集市为您收集整理的Effective C++ 条款27 尽量少做转型操作全部内容,希望文章能够帮你解决Effective C++ 条款27 尽量少做转型操作所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。