static_cast, dynamic_cast和reinterpret_cast

来源:互联网 发布:知乎图标如何变 编辑:程序博客网 时间:2024/05/23 10:34

static_cast:用于基本类型(int,char, float, double等)转换,指针除外


dynamic_cast:类家族之间指针或引用的转换,它可以识别出不安全的下行转换,但并不抛出异常,而是将转换的结果设置成null


reinterpret_cast这个转换是最“不安全”的,两个没有任何关系的类指针之间转换都可以用这个转换实现,所以叫强制转转换在系统底层的操作,有极强的平台依赖性,移植性不好


const_cast常量向非常量转换


C风格转换是“万能的转换”,但需要程序员把握转换的安全性,编译器无能为力;static_cast最接近于C风格转换,但在无关类指针转换时,编译器会报错,提升了安全性;dynamic_cast要求转换类型必须是指针或引用,且在下行转换时要求基类是多态的,如果发现下行转换不安全,dynamic_cast返回一个null指针,dynamic_cast总是认为void*之间的转换是安全的;reinterpret_cast可以对无关类指针进行转换,甚至可以直接将整型值转成指针,这种转换是底层的,有较强的平台依赖性,可移植性差;const_cast可以将常量转成非常量,但不会破坏原常量的const属性,只是返回一个去掉const的变量。

0 0