C++的类型转换运算符总结



前言

  C语言的类型转换比较自由,但也带来了一些问题,这些问题大多由程序员自行控制和解决。对于庞大的C++语言机制而言,这种简单粗暴的类型转换方式显然是个巨大的负担,因此C++引入4种类型转换运算符,更加严格的限制允许的类型转换,使转换过程更加规范:

  • dynamic_cast 用于多态类型的转换
  • static_cast 用于非多态类型的转换
  • const_cast 用于删除const ,volatile__unaligned 属性
  • reinterpret_cast 用于位的简单重新解释

  其中,const_castreinterpret_cast的使用会带来更大的风险,因此不到万不得已,不推荐使用。

dynamic_cast

dynamic_cast<type>(expression);

作用: 将expression转换为type类型.

备注:
  ① 转换类型必须是一个指针、引用或者void*,用于将基类的指针或引用安全地转换成派生类的指针或引用;
  ② dynamic_cast在运行期间强制转换,运行时进行类型转换检查;
  ③ 对指针进行转换,失败返回null,成功返回type类型的对象指针,对于引用的转换,失败抛出一个bad_cast ,成功返回type类型的引用;
  ④ dynamic_cast不能用于内置类型的转换;
  ⑤ 用于类的转换,基类中一定要有virtual定义的虚函数(保证多态性),不然会编译错误
  

这里写图片描述
  没有多态性的基类无法进行dynamic_cast强制转换

举个例子:
  dynamic_cast最常用的场景就是将原本“指向派生对象的基类指针或引用”升级为“派生类指针或引用”,比如——

#include<iostream>
using namespace std;
// 基类
class Base {
public:
    virtual void show() {
        cout << "void Base::show();" << endl;
    };
    virtual ~Base() {};
};
//派生类
class Derived :public Base {
public:
    void show() {
        cout << "void Derived::show();" << endl;
    };
};
int main() {
  
  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值