static_cast/dynamic_cast/reinterpret_cast/const_cast

最近在复习C/C++又看到了几个类型转换的操作符 ,下面记录下几个操作符的用途和特点。

1. static_cast

  • 用途:用于基本数据类型之间的转换,如 int 转换为 double;也可以用于具有继承关系的类对象之间的转换,比如从基类指针转换为派生类指针(如果可以确定安全性的话),但不提供运行时检查。
  • 特点:没有运行时类型检查,因此不能保证转换的安全性。

2. dynamic_cast

  • 用途:专门用于处理多态类型(即有虚函数的类)的指针或引用的转换。它可以安全地将基类指针或引用转换为派生类的指针或引用,并且会在运行时验证转换是否合法。
  • 特点:提供了运行时检查,如果转换不可行,则返回 nullptr(对于指针)或者抛出一个异常(对于引用)。主要用于支持安全的向下转型和跨分支转换。
    dynamic_cast 在 C++ 中主要用于安全地将基类指针或引用转换为派生类的指针或引用,但它的用途不仅仅限于此。它还可以用于在具有继承关系的类之间进行“向下转型”(即从指向基类的指针或引用转换为指向派生类的指针或引用)以及“侧向转型”(即在同一层次结构中的兄弟类之间进行转换)。

3. reinterpret_cast

  • 用途:执行低级别的转换,甚至允许你将任何指针类型转换为另一个指针类型,或整型与指针之间的转换。这种转换通常用于底层编程,比如硬件访问等。
  • 特点:非常强力但也危险,因为它绕过了编译器的类型系统,不会进行任何类型检查或转换逻辑。

4. const_cast

  • 用途:用来添加或移除变量的 constvolatile 属性。例如,如果你有一个指向 const 数据的指针,但需要传递给一个接收非 const 指针的函数,你可以使用 const_cast 来移除 const 属性。
  • 特点:仅改变 constvolatile 属性,不对其他类型信息做修改。需要注意的是,如果原始数据是真正只读的,移除 const 可能导致未定义行为。

总结

  • dynamic_cast 主要用于在具有继承关系的类之间进行安全的指针或引用转换,特别是当涉及到向上、向下或侧向转换时。
  • 其他三种类型转换各有其特定场景:
    • static_cast 适用于基本类型的转换及可预见安全性的类间转换。
    • reinterpret_cast 提供了更为激进的类型转换,适用于底层编程需求。
    • const_cast 专门用于添加或移除 constvolatile 属性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值