C++初学者的日常记录19年6月30日

本文深入探讨了C++中static_cast、dynamic_cast、reinterpret_cast和const_cast四种类型转换操作符的应用场景与区别。static_cast用于基本类型转换及部分类指针转换;dynamic_cast专为指针或引用操作设计,具备类型安全检查;reinterpret_cast用于低级编程中的地址转换;const_cast则用于移除常量限定。文章详细解释了每种操作符的特点与使用场合。

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

static_cast , const_cast , reinterpret_cast , dynamic_cast的应用和区分

static_cast

用来进行数值类型间的转化,比如int到float,也可以是自定义的某些数据类型的转化。也可以用于类指针之间的转化,但是这个运算符在父类到子类的转化中没有做检查并不安全。static_cast转换不像dynamic_cast转换那样安全,因为static_cast没有运行时类型检查,而dynamic_cast有。对模糊指针的dynamic_cast将失败,而static_cast则返回,就好像没有错误一样;这可能很危险。

dynamic_cast

这个操作符专门用于指针或者引用操作,也可以进行point -> void 的操作。对父类和子类之间的指针装换这个操作具有类型检查的功能,比较安全!这里要注意的是,如果父类和子类之间没有虚函数(文档称为多态类),那么dynamic_cast不能执行转换,应采用static_cast来进行转换。

reinterpret_cast

在低级编程以及硬件接口的开发过程中,常常需要将一个特定的物理内存地址赋值给一个指针。为此必须使用reinterpret_cast操作符计算地址值。例子如下:
void p;
// 将地址 0x5800FF 付给指针 p
p = reinterpret_cast< void
> (0x5800FF);

const_cast

const_cast转换符是用来移除变量的const或volatile限定符。后者涉及到了多线程的设计。
const int constant = 21;
const int* const_p = &constant;
int* modifier = const_cast<int*>(const_p);
*modifier = 7;
(注:本文章借鉴了(https://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.html)和(https://www.jianshu.com/p/1a2310f1b58e)的内容,不用于商业用途,侵删)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值