C++中的显示转换总结

来源:互联网 发布:windows白屏 编辑:程序博客网 时间:2024/05/18 18:19

内容参考的是C++编程思想和C++Primer,如果转载请注明出处。

  标准的C++提供了四种转换,static_cast,const_cast,reinterpret_cast,dynamic_cast。虽然有时候确实需要强制转换,但是它们的本质上是很危险的。

<1>static_cast

       编译器隐式执行的任何类型的转换都可以由static_cast来完成。它主要用在典型的非强制转换(比如int->double),窄化(double->int可能丢失数据),使用void *的强制转换(C++不转换是不能赋值的),隐式类型变换和类层次的静态定位。

<2>const_cast

       如果从const转换成非const或从volatile转换为非volatile可以使用const_cast。这个是它的唯一的作用。

<3>reinterpret_cast

       reinterpret_cast通常为操作数的位模式提供较低层次的重新解释。reinterpret_cast本质上依赖机器,为了安全的使用reinterpret_cast,要求程序员完全理解所涉及的数据类型,以及编译器实现强制类型转换的细节。

<4>dynamic_cast

       安全类型向下进行转换,当使用dynamic_cast试图向下类型转换一种特定的类型,仅当类型转换是正确的并且是成功的时候,返回值会是一个指向所需类型的指针,否则返回0.dynamic_cast运行时需要一点额外的开销,当执行大量的dynamic_cast的时候就会影响到性能了。有的时候进行向下类型转换的时候如果我们知道正在处理的是何种类型就可以用static_cast代替dynamic_cast而不必运行时检查。

0 0
原创粉丝点击