C ++ POD类型有RTTI吗?

时间:2016-02-11 14:38:21

标签: c++ rtti vtable

据我所知,RTTI是如何在各种C ++编译器(例如GCC)中实现的,指向type_info数据的指针存储在每个类的vtable数据中。

如前所述[{3}},POD类型可能没有vtable

但是如果POD类型可能没有vtable那么指向type_info的指针存储在哪里?我知道它是特定于实现的,但是最好知道C ++编译器(例如GCC)内部。

1 个答案:

答案 0 :(得分:8)

有两种类型(出于RTTI的目的):多态类型和非多态类型。多态类型是一种类型,它本身具有虚函数或从基类继承。非多态类型是其他所有;这包括POD类型,但它也包括许多其他类型。

如果您有指向多态类型T的指针/引用,并且在其上调用typeid,那么您获取的type_info不一定是type_info您会回来typeid(T{})。相反,它是对象的 true 动态类型:派生最多的类。

如果你有一个 - 多态类型T的指针/引用,typeid总是返回type_info T本身。非多态类型总是假设指针/引用正是它的静态类型。

POD类型是非多态的,但是大量其他类型也是非多态的。