【发布时间】:2014-09-08 11:15:06
【问题描述】:
我对 C++ 中的 RTTI 机制有些困惑。
假设有继承自 A 的 A 类和 B 类。现在考虑以下代码:
B* b = new B();
A* a = dynamic_cast<A*>(b);
我知道具有虚方法的多态类具有虚表和 vptr,但我认为指针仅提供有关虚函数的信息。程序如何在运行时使用 vptr 和 vtables 知道 b 的类型?
【问题讨论】:
-
“我认为指针只提供有关虚函数的信息” - 你为什么这么认为? vptr 指向所有动态类型信息 - vtable,以及 RTTI 所需的任何内容。
-
@MikeSeymour 除了 vtable,还有什么指向?
-
支持 RTTI 需要任何特定于实现的元数据。恐怕我不知道它通常是如何实现的,但如果你有兴趣,我相信谷歌会告诉你。
-
This 可能有帮助,也可能没有帮助。
标签: c++ polymorphism rtti