C++ POD 类型是否具有 RTTI?

Do C++ POD types have RTTI?

据我了解 RTTI 在各种 C++ 编译器(例如 GCC)中的实现方式,指向 type_info 数据的指针存储在每个 class 的 vtable 数据中。

而且如前所述 here,POD 类型可能没有 vtable

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

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

如果你有一个 pointer/reference 到一个多态类型 T,并且你在它上面调用 typeid,你得到的 type_info 不一定是 type_info 你会回来 typeid(T{})。相反,它是对象的 true 动态类型:最派生的 class.

如果您有 pointer/reference 到 多态类型 Ttypeid 始终 return type_info 代表 T 本身。非多态类型总是假定 pointer/reference 正是它的静态类型。

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