C++:四大类型转换

C++引入了4种类型转换运算符以增强类型转换的安全性:dynamic_cast用于多态类型转换,static_cast用于非多态类型转换,const_cast用于移除const等属性,reinterpret_cast用于位的简单重新解释。dynamic_cast提供运行时类型检查,适用于基类到派生类的转换,失败时返回null或抛出异常。static_cast不提供运行时检查,常用于类层次转换和内置类型转换。const_cast用于改变对象的const/volatile属性,仅限于同类型转换。reinterpret_cast则主要用于不同类型的位转换,不保证安全性。
摘要由CSDN通过智能技术生成

前言

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

dynamic_cast 用于多态类型的转换
static_cast 用于非多态类型的转换
const_cast 用于删除const ,volatile 和 __unaligned 属性
reinterpret_cast 用于位的简单重新解释
其中,const_cast和reinterpret_cast的使用会带来更大的风险,因此不到万不得已,不推荐使用。

dynamic_cast

//将expression转换为type类型.
dynamic_cast<type>(expression);

注:
1、转换类型必须是一个指针、引用或者void*,用于将基类的指针或者引用安全地转换成派生类的指针或引用;
2、dynamic_cast在运行期间强制转换,运行时进行类型检查;
3、不能用于内置类型转换;
4、用于类型转换,基类中一定要有虚函数(保证多态),不然会编译错误。(类中存在虚函数,就说明它有想要让基类指针或引用指向派生类对象的情况,此时转换才有意义。由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表)
5、对指针进行dynamic_cast,失败返回null,成功返回正常cast后的对象指针;对引用进行dynamic_cast,失败抛出一个异常,成功返回正常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() {
   
    Base* base = new Derived
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值