C++ RTTI 与多态机制深度解析
C++ 的 RTTI(Run-Time Type Information,运行时类型信息) 是一套在程序运行时查询和操作对象类型信息的机制。它主要用于在继承体系中安全地识别和转换对象的实际类型。
RTTI 的核心组成
C++ 标准库主要通过以下两个组件提供 RTTI 支持:
typeid 运算符
用于获取对象或类型的类型信息,返回一个 const std::type_info& 对象,可比较两个类型是否相同。
#include <iostream>
#include <typeinfo>
class Base {
virtual ~Base() = default; // 必须有虚函数!
};
class Derived : public Base {};
int main() {
Base* b = new Derived();
std::cout << typeid(*b).name() << std::endl; // 输出实际类型(如 "7Derived")
std::cout << (typeid(*b) == typeid(Derived)) << std::endl; // true
delete b;
}
注意:只有多态类型(含虚函数的类)才能通过基类指针/引用正确识别派生类类型。否则
typeid返回的是静态类型(即指针声明的类型)。
dynamic_cast 运算符
用于安全地在继承层次结构中转换指针或引用(主要是向下转型)。依赖 RTTI 信息进行运行时检查。
Base* b = new Derived();
Derived* d = dynamic_cast<Derived*>(b);
if (d) {
std::cout << "Cast succeeded!" << std::endl;
} {
std::cout << << std::endl;
}


