1.const_cast安全
看见const,你们第一反映就是关键字,对这个类型装换和const关键字相关。这个类型转换用来舍弃变量的不可变特性。实际在过程当中,其实咱们不准要使用这个类型转换。可是可能在使用第三方库的时候不如你所愿,库对你是不可见的,因此你须要这个转换。函数
2.static_cast性能
static_cast是咱们使用的最多的类型转换。它显示地执行C++语言直接支持的转换,好比int转换为double。对于自定义的类类型,只要提供了关键的构造函数或者转换例程也能够进行显示的转换。spa
static_cast能够用于指针和引用,可是不能用与对象自己。很遗憾,它不进行类型检测,第四中介绍的类型转换会进行类型检测。指针
3.reinterpret_cast对象
reinterpret的中文释义为从新解释,你可想而知,这个转换是多么的强大,你能够从新解释一个东西。两个指针指向的对象能够没有继承层次,你能够装换,固然应用也会能够的,即便他们之间什么关系也没。这个关键字常常被用来将指针转换为void*(其实这个过程static_cast也能够)以及逆过程。继承
你使用它将指针转换成int和int装换成指针。虽然在某些状况下能够,可是移植行不好,好比在64位平台,指针是64位,而int多是32位。io
4.dynamic_cast编译
dynamic释义动态的。它为继承层次结构内的类型提供运行时检测,须要RTTI(real time type infomation)支持。它能够装换指针和引用,在运行时检测对象类型,若是转换没有意义,对于指针返回一个空指针,对于引用抛出一个ast
bad_cast异常。
因为对象运行时类型信息存储在对象的虚表中,为了可使用dynamic_cast,须要类拥有一个虚函数。没有虚表的话,尝试使用它,对获得一个编译错误。
使用static_cast和reinterpret_cast均可以沿着继承层次向下转型。不过dynamic_cast进行运行时检测,可能性能有那么一丁点影响,不过很安全。