c++中各种类型转换

c++中的类型转换包括隐式类型转换和显式类型转换。隐式类型转换例如在int与float相加时已经发生,显示类型转换主要包括以下四种:

1. static_cast:
主要用于非多态之间的类型检查。不提供运行时的类型检查来确保转换的安全性,因此效率较高。常应用于以下场景:
* 类层次结构中,父类与子类的指针和引用之间的转换,子类转父类时是安全的,父类转子类时是不安全的,需要程序员自己来保证安全性。
* 基本数据类型之间的转换,这种转换的安全性需要程序员自己来保证。
* void指针转换为其他类型指针,及其不安全。
注:static_cast不能转换掉expression的const、volatile和__unaligned属性。
2. dynamic_cast:
转换类型必须是指针或者引用,src和target需要同为指针或者引用。既可以用于类层次结构中的转换,也可以用于类之间的转换。
* 类层次结构中,子类转父类与static_cast基本一致,父类转子类提供了运行时检查,因此是安全的。
* 转换成(void*),src必须包含虚函数。
* 如果src是基类指针,则转换过程中会判断真的指向target类型对象,否则返回null,如果src是基类引用,则会抛异常。
3. reinterpret_cast:
处理无关类型之间的转换。它会产生一个新的值,新的值与src之间拥有完全一样的比特位。但是不能去除变量的const等属性。
4. const_cast:
const_cast可以将const, volatile和__unaligned移除。
注:你不能直接对非指针和非引用的变量使用const_cast操作符去直接移除它的const、volatile和__unaligned属性。
volatile是为了防止多任务情况下,变量的取值不是从内存中取而是从寄存器cache里面取的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值