C ++ POD类型有RTTI吗?

问题描述 投票:5回答:1

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

而且正如提到的here,POD类型可能没有vtable

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

c++ rtti vtable
1个回答
8
投票

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.