Zhonghui

每个不曾起舞的日子,都是对生命的辜负

User Tools

Site Tools


程序:cpp:类型转换

C++类型转换

C++提供了4种更安全的(显式)类型转换方式
相较于C风格的强制类型转换更安全

  1. static_cast<T>(expression)
  2. dynamic_cast<T>(expression)
  3. const_cast<T>(expression)
  4. reinterpret_cast<T>(expression)

RTTI(Run Time Type Identification)即通过运行时类型识别,程序能够使用基类的指针或引用来检查着这些指针或引用所指的对象的实际派生类型。


static_cast

任何编写程序时能够明确的类型转换都可以使用static_cast
由于不提供运行时的检查所以叫static_cast
主要使用场景包括

  • 用于类层次结构中父类和子类之间指针和引用的转换
  • 用于基本数据类型之间的转换
  • 把void指针转换成目标类型的指针

dynamic_cast

dynamic_cast会在运行时检查类型转换是否合法
由于运行时的检查所以会额外消耗一些性能
dynamic_cast使用场景与static_cast 相似
在类层次结构中使用,下行转换时
dynamic_cast会检查转换的类型,相比static_cast更安全
dynamic_cast转换仅适用于指针或引用
若指针转换失败则返回空指针,若引用转换失败则抛出异常
在类层次间进行转换时,要求类必须有虚函数成员(Why?)

const_cast

const_cast用于移除类型的const、volatile和__unaligned属性
常量指针被转换成非常量指针并且仍然指向原来的对象
常量引用被转换成非常量引用并且仍然引用原来的对象

reinterpret_cast

非常激进的指针类型转换
在编译期完成,可以转换任何类型的指针
极不安全,及其自由
适合转为字节等操作(?)

/var/www/DokuWikiStick/dokuwiki/data/pages/程序/cpp/类型转换.txt · Last modified: 2022/10/07 10:54 by zh