C++深入理解(11)------关于static_cast,dynamic_cast,const_cast,reinterpret_cast(读书笔记)

        C语言规定了很多的隐式转化,如将int转为double等,但是隐式转化时常会造成一些问题,所以在C++中定义了四种规范转换方式,来规范转化。下面依次讲述下每个转化的用法:

        dynamic_cast:只能用于将派生类指针转化为基类指针,否则就会赋空值。这种转化只能用于is-a类型的转化,用法如下:

    BaseClass *pBase = dynamic_cast<BaseClass*>(pSub);
        const_cast:只用于一种用途,即将const转化为volatile,其语法
High bar ;
const High *pbar = &bar ;
High *pb = const_cast<High*> (pbar); //正确的,将pbar转化为可以非const
const Low *pi = const_cast<const Low *> (pbar); //非法的,如果将pbar转化为非const,但是又转化为const
        其他转换都是非法的;

        static_cast:只能转化可以隐式转化的类型,如double可以隐式转化为int,派生类指针可以隐式转化为基类指针,但是基类指针转化为派生类指针就会报错;

        reinterpret_cast:功能比较强大,他可以根据内存中的值转化为另一种类型,如

struct dat {short a ; short b ;};
long value = 0xA224B118;
dat * pd = reinterpret_cast<dat*> (&value );
cout << hex << pd->a ; / / display first 2 bytes of value
        dat的内存是连续的,将long在内存中的位置的指针位置给dat,同时将long转化为dat类型。有时处理结构体异常有用。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值