C++中的类型转换 RTTI
四种类型转换
转换类型 | 描述 | 用法示例 |
---|---|---|
static_cast |
执行编译时的普通类型转换。用于大多数类型转换,如基本数据类型、指针、引用等(转换的数据之间需要有一定的联系,转换在编译时进行检查,如果转换是非法的或者不可能在编译时确定其安全性,编译器将给出错误或警告) | int i = 10; double d = static_cast<double>(i); |
dynamic_cast |
执行运行时的类型安全转换。用于多态类型(具有虚函数的类)之间的转换。 | Base* b = new Derived(); Derived* d = dynamic_cast<Derived*>(b); |
const_cast |
添加或去除对象的 const 或 volatile 限定符。 |
const int* c = &i; int* p = const_cast<int*>(c); |
reinterpret_cast |
执行低级别的位模式转换,通常用于指针类型。 | long l = reinterpret_cast<long>(p); |
dynamic_cast用于将一个父类对象的指针/引用转换为子类对象的指针或引用(动态转换)
- dynamic_cast会先检查是否能转换成功,能成功则转换,不能则返回0
- 向上转型:子类对象指针/引用->父类指针/引用(不需要转换,赋值兼容规则)
- 向下转型:父类对象指针/引用->子类指针/引用(用dynamic_cast转型是安全的)
RTTI:Run-time Type identification的简称,即:运行时类型识别。
- C++通过以下方式来支持RTTI:
- typeid运算符
- dynamic_cast运算符
- decltype
C++中的类型转换 RTTI
https://weihehe.top/2024/08/10/C-中的类型转换/