C++ 四类cast转换

作用:为了克服C中强制类型转化带来的风险,C++引入的四种更加安全的强制类型转换运算符(明确转换的目的,偏于程序的维护和分析)

  1. const_cast
    const char *p; 
    char *p1 = const_cast<char*>(p);
    
    1. 去除const属性,将只读变为可读写
    2. 针对常量指针,常量引用和常量对象
  2. static_cast(用于强制隐式转换)
    • 内置数据类型之间的转换,int 转double,char转int
    • 基类指针与派生类指针的转换,只能转换有继承或派生关系的类
    • 把void类型指针转换为目标类型的指针
    // 整形转浮点型
    int a = 10;
    double b = static_cast<double>a;
    
    //基类指针转派生类
    class A{}; class B : public A{};
    
    A *pA = new A;
    
    B *pB = static_cast<B*>(pA);
  3. reinterpret_cast
    • C++peimer中的解释是为运算对象的位模式提供较低层次上的重新解释
    • 用于底层的强制转型,依赖于机器,一般使用较少
  4. dynamic_cast
    1. dynamic_cast是运行时处理的,而其他三种转换都是编译时处理的
    2. 不能用于内置数据类型之间的转换
    3. dynamic_cast在进行上行转换时和static_cast效果是一样的,但是进行下行转换时会进行类型检查,比static_cast更加安全,下行转换是否成功取决于转换对象的实际类型与目标类型是否相同
    4. 要求基类必须要有虚函数
    5. 若转换成功,返回的是指向类的指针或引用,不成功返回NULL

希望我的分享能帮到你~如果觉得不错,也可以三连走一波~~~

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想是优秀社畜

您的打赏是对我最大的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值