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

本文详细介绍了C++中的4种类型转换运算符:dynamic_cast、static_cast、const_cast和reinterpret_cast。dynamic_cast用于多态类型的转换,具有运行时类型检查,确保安全。static_cast在编译时进行转换,适用于非多态类型的转换。const_cast用于移除变量的const或volatile属性,仅限于指针和引用。reinterpret_cast则用于任意指针间的转换和整数与指针之间的转换,但不保证安全性。文章总结了各种转换运算符的特点和应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



前言

  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;
    };
};
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值