C++的四种转型小结

static_cast

static_cast应该是适用范围最广的,适用于很多隐式转换,基类指针与子类指针的相互转换,或者添加const属性,去掉const属性应该用const_cast

double a = 10.23int b = static_cast<int>(a);
Base *ptr = new Child();
Child ptr2 = static_cast<Child*>(ptr);
const Base *ptr3 = static_cast<const Base*>(ptr)

但是需要注意的是,static_cast 在执行基类的指针转换为派生类的指针时( 即向下转型),此类转换并非始终安全。这时应该使用dynamic_cast,如果是向上转型,则两者效果相同。

dynamic_cast

dynamic_cast转换符只能用于指针或者引用。dynamic_cast转换符只能用于含有虚函数的类。dynamic_cast转换操作符在执行类型转换时首先将检查能否成功转换,如果能成功转换则转换之,如果转换失败,如果是指针则反回一个0值,如果是转换的是引用,则抛出一个bad_cast异常,所以在使用dynamic_cast转换之间应使用if语句对其转换成功与否进行测试,比如pd = dynamic_cast(pb); if(pd){…}else{…},或者这样测试if(dynamic_cast(pb)){…}else{…}。

Base *ptr = new Base();
Child * ptr2 = dynamic_cast<Child*>(ptr);
if(!ptr2)
    cout<<error;

ptr指针指向的是基类,转化为子类指针肯定会引发问题,所以这个时候我们应该使用dynamic_cast进行检查,这样可以避免盲目转换。

const_cast

用来将对象的常量性去除

reinterpret_cast

它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,再把该整数转换成原类型的指针,还可以得到原先的指针值),或者把一种指针转为另一种指针

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值