RTTI(运行时类型识别)

运行时类型识别,在C++层面主要体现在dynamic_cast和typeid,VS中虚函数表的-1位置存放了指向type_info的指针。对于存在虚函数的类型,typeid和dynamice_cast都回去查询type_info。

运行时类型识别RTTI由两个运算符实现:

  • typeid运算符,用于返回表达式的类型
  • dynamic_cast运算符,用于将基类的指针或引用安全地转换成派生类的指针或引用

dynamice_cast

typeid

type_info

参考C++对象模型系列1中的【示例1:虚拟继承下的C++对象模型】的Point2d的虚函数表可知,在虚函数中的第一个slot即为type_info对象。

参考文献

[1]深度探索C++对象模型