C++ POD类型有RTTI吗?

M. *_* E. 5 c++ rtti vtable

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

而且如这里提到的,POD类型可能没有vtable.

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

Nic*_*las 8

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

如果你有一个多态类型的指针/引用T,并且你调用typeid它,type_info你回来的不一定是type_info你会得到的typeid(T{}).相反,它是对象的真正动态类型:派生最多的类.

如果你有一个非多态类型的指针/引用T,typeid始终返回type_infofor T本身.非多态类型总是假设指针/引用正是其静态类型.

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