C++中的类型转换

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进行运行时检测,可能性能有那么一丁点影响,不过很安全

相关文章
相关标签/搜索