据我所知,RTTI是如何在各种C ++编译器(例如GCC)中实现的,指向type_info
数据的指针存储在每个类的vtable
数据中。
如前所述[{3}},POD类型可能没有vtable
。
但是如果POD类型可能没有vtable
那么指向type_info
的指针存储在哪里?我知道它是特定于实现的,但是最好知道C ++编译器(例如GCC)内部。
答案 0 :(得分:8)
有两种类型(出于RTTI的目的):多态类型和非多态类型。多态类型是一种类型,它本身具有虚函数或从基类继承。非多态类型是其他所有;这包括POD类型,但它也包括许多其他类型。
如果您有指向多态类型T
的指针/引用,并且在其上调用typeid
,那么您获取的type_info
不一定是type_info
您会回来typeid(T{})
。相反,它是对象的 true 动态类型:派生最多的类。
如果你有一个非 - 多态类型T
的指针/引用,typeid
将总是返回type_info
T
本身。非多态类型总是假设指针/引用正是它的静态类型。
POD类型是非多态的,但是大量其他类型也是非多态的。