C++中的类型转换

const_cast

作用:通常用来改变对象的常量性或易变性,他也是唯一有此能力的C++风格的转型操作符,其他用途将会被拒绝

dynamic_cast

作用:主要用来执行“安全向下转型或跨系转型动作”,也就是用来决定某对象是否归属继承体系中的某个类型。他是唯一无法由旧式语法执行的动作,也是唯一可能耗费重大运行成本的转型动作

如果转型失败,会以一个空指针(当转型对象是指针)或者一个异常(当转型对象是引用)表现出来

dynamic_cast只能用来协助你巡航于继承体系中,它无法应用在缺乏虚函数的类型身上(这里表明了他的实现方式),也不能改变类型的常量性

如果你想为一个不涉及继承机制的类型执行转型动作,可使用static_cast,如果要改变常量性,则必须使用const_cast

reinterpret_cast

作用:意味着执行低级转型,实际动作可能取决于编译器,这也就表示它不可移植。例如将一个整型指针转型为一个整型。这一转型只有在低级代码中比较常见。以及函数指针转型动作,并不具有移植性,某些情况下这样的转型可能会导致不正确的结果,所以应该尽量避免

static_cast

作用:用来强迫隐式转换,比如将非const转型为const,或将int转为double等等。它也可以用来执行上述多种转换的反向转换,例如将void*指针转换为type *指针,将基类指针转换为派生类指针。从上可以看出,static_cast基本上拥有与C就是转型相同的威力和意义,以及相同的限制,但是它无法将const转换为non-const(反之可以通过),这个只有const_cast才能办到
C++类型转换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值