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