运行时类型识别,在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++对象模型