【问题标题】:Do C++ POD types have RTTI?C++ POD 类型有 RTTI 吗?
【发布时间】:2016-02-11 14:38:21
【问题描述】:

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

同样如here 所述,POD 类型可能没有vtable

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

【问题讨论】:

  • 指针是静态确定的,对吧?因为没有什么动态需要考虑的。
  • “了解 C++ 编译器(例如 GCC)的内部结构会更好。”嗯,GCC 和 Clang 都是开源的,所以你可以看看它。
  • AFAIK,没有。 see this code
  • 澄清 Kerrek 的声明:POD 类型确实有 type_info,但没有 RTTI,这是可能的,因为 type_info 并不总是 RTTI。

标签: c++ rtti vtable


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2016-04-02
    • 2016-12-05
    • 2011-01-15
    • 1970-01-01
    • 2013-02-24
    相关资源
    最近更新 更多