C++中的类型转换

35 篇文章 6 订阅

1.const_cast

   看见const,大家第一反映就是关键字,对这个类型装换和const关键字相关。这个类型转换用来舍弃变量的不可变特性。实际在过程中,其实我们不许要使用这个类型转换。但是可能在使用第三方库的时候不如你所愿,库对你是不可见的,所以你需要这个转换。

2.static_cast

  static_cast是我们使用的最多的类型转换。它显示地执行C++语言直接支持的转换,比如int转换为double。对于自定义的类类型,只要提供了关键的构造函数或者转换例程也可以进行显示的转换。

   static_cast可以用于指针和引用,但是不能用与对象本身。很遗憾,它不进行类型检测,第四中介绍的类型转换会进行类型检测。

3.reinterpret_cast

  reinterpret的中文释义为重新解释,你可想而知,这个转换是多么的强大,你可以重新解释一个东西。两个指针指向的对象可以没有承层次,你可以装换,当然应用也会可以的,即使他们之间什么关系也没。这个关键字经常被用来将指针转换为void*其实这个过程static_cast也可以)以及逆过程。

   你使用它将指针转换成int和int装换指针。虽然在某些情况下可以,但是移植行很差,比如在64位平台,指针是64位,而int可能是32位。

4.dynamic_cast

   dynamic释义动态的。它为继承层次结构内的类型提供运行时检测,需要RTTI(real time type infomation)支持。它可以装换指针和引用,在运行时检测对象类型,如果转换没有意义,对于指针返回一个空指针,对于引用抛出一个

bad_cast异常。

    由于对象运行时类型信息存储在对象的虚表中,为了可以使用dynamic_cast,需要类拥有一个虚函数。没有虚表的话,尝试使用它,对得到一个编译错误。

      使用static_cast和reinterpret_cast都可以沿着继承层次向下转型。不过dynamic_cast进行运行时检测,可能性能有那么一丁点影响,不过很安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值