C四种强制类型转换总结

北京手足癣医院哪里好 http://pf.39.net/bdfyy/bdfyw/210707/9152858.html

总结到了嵌入式培训的·C++部分,发现越总结内容越多,只能博客+百家一起更新了。

C++的强制类型转换除了C语言风格的typeexpression类的转换,还有针对类和对象的标准C++强制类型转换,下面总结下概念性的东西,有个认知,之后举个例子方便之后使用的时候参考。

标准C++类型转换有四种:static_cast,dynamic_cast,reinterpret_castconst_cast。static_cast:用法:static_casttype-id(expression)

该运算符将expression转换成type-id类型,但是该运算符没有进行运行时类型检查来保证转换的安全性。

dynamic_cast:用法:dynamic_casttype-id(expression)

该运算符将expression转换成type-id类型,其中type-id必须是类的指针、引用或者void*。type-id和expression需要是同一种表示方式(引用对引用,指针对指针)。该运算符主要用于类层次之间的上行和下行转换,或者类之间的交叉转换。类层次间的上下行转换效果和static_cast一样,但是下行转换时,dynamic_cast具有类型检查功能,比static_cast更安全。

reinterpret_cast:用法:reinterpret_casttype-id(expression)

type-id必须是一个指针、引用、算术类型、函数指针或成员指针,可以进行指针和整数之间的相互转换,缺点:平台移植性比较差。

const_cast:用法:const_casttype-id(expression)

该运算符用来修改类型的const或volatile属性,除了const或volatile修饰外,type-id和expression类型是一样的。如常量指针变成非常量指针,且仍指向原来对象。

下面总结四种运算符的使用场景,示例等:static_cast用于将一种数据类型强转为另一种类型,以及找回存在于void*指针中的值。!注意:static_cast不能转换掉expression的const、volitale或者__unaligned属性

const_cast:去除constvolatile属性

reinterpret_cast:被转换类型必须是一个指针、引用、算术类型、函数指针或者成员指针。用于映射完全不同类型,但是,这个也是最危险的。

dynamic_cast区别于其他三种转换是该运算符是运行时处理的,在运行时需进行类型检查,且不能用于内置的基本数据类型的强转。




转载请注明:http://www.aierlanlan.com/cyrz/5368.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了