[其它应用] 说说强制类型转换运算符

[复制链接]
3185|7
 楼主| duo点 发表于 2024-3-16 11:00 | 显示全部楼层 |阅读模式

「static_cast」

  • 用于非多态类型的转换
  • 不执行运行时类型检查(转换安全性不如 dynamic_cast)
  • 通常用于转换数值数据类型(如 float -> int)
  • 可以在整个类层次结构中移动指针,子类转化为父类安全(向上转换),父类转化为子类不安全(因为子类可能有不在父类的字段或方法)

「dynamic_cast」

  • 用于多态类型的转换
  • 执行行运行时类型检查
  • 只适用于指针或引用
  • 对不明确的指针的转换将失败(返回 nullptr),但不引发异常
  • 可以在整个类层次结构中移动指针,包括向上转换、向下转换

「const_cast」

  • 用于删除 const、volatile 和 __unaligned 特性(如将 const int 类型转换为 int 类型 ) reinterpret_cast
  • 用于位的简单重新解释
  • 滥用 reinterpret_cast 运算符可能很容易带来风险。除非所需转换本身是低级别的,否则应- 使用其他强制转换运算符之一。
  • 允许将任何指针转换为任何其他指针类型(如 char* 到 int* 或 One_class* 到  Unrelated_class* 之类的转换,但其本身并不安全)
  • 也允许将任何整数类型转换为任何指针类型以及反向转换。
  • reinterpret_cast 运算符不能丢掉 const、volatile 或 __unaligned 特性。
  • reinterpret_cast 的一个实际用途是在哈希函数中,即,通过让两个不同的值几乎不以相同的索引结尾的方式将值映射到索引。

「bad_cast」

  • 由于强制转换为引用类型失败,dynamic_cast 运算符引发 bad_cast 异常。

bad_cast 使用

try {
    Circle& ref_circle = dynamic_cast<Circle&>(ref_shape);
}
catch (bad_cast b) {
    cout << "Caught: " << b.what();
}
CarterERO 发表于 2024-3-18 11:19 来自手机 | 显示全部楼层
这几个运算符还真没用过,强制转换时候都是加括号
LEDyyds 发表于 2024-3-18 15:02 | 显示全部楼层
有时候会强转不过来,为何
Jacquetry 发表于 2024-3-28 10:17 来自手机 | 显示全部楼层
还是用()方便
在水一方00 发表于 2024-3-28 16:25 | 显示全部楼层
关于 C++ 中四种强制类型转换运算符 static_cast、dynamic_cast、const_cast 和 reinterpret_cast 的详细解释确实比较繁琐,我也回帖记录一下。、
与人间浪漫 发表于 2025-6-29 16:55 | 显示全部楼层
一般强制类型转换运算符是一种显式改变数据类型的操作符,通过(type)语法将表达式转换为指定类型。它能突破隐式转换限制,如将浮点值截断为整数、指针类型间转换。但过度使用可能丢失精度(如double转int)或引入未定义行为(如不兼容指针转换),需谨慎权衡安全性与需求。
一点点晚风 发表于 2025-7-23 11:06 | 显示全部楼层
强制类型转换运算符可将浮点数截断取整为整数类型。
波尔街道的松柏 发表于 2025-8-27 13:04 | 显示全部楼层
强制类型转换运算符将一种数据类型转为另一种,分显式(如 (int) x)和隐式,显式需手动指定,用于满足运算或函数参数类型要求。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

573

主题

2522

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部