给定一个带有虚函数 f 的基类 B、一个派生类 D 和它自己的 f 实现,这是我的场景:
B& b = *new D; b.f();
D& d = *new D; d.f();
项目符号 1 中的代码是否涉及从 vtable 获取 f 的地址然后跳转?清单 2 中的代码是否涉及任何 vtable 查找?
我知道这些可能取决于编译器,并且标准可能不会指定实现细节。在这种情况下,如果了解 GCC 或 CLANG 如何处理这些情况的人提供解释,我将不胜感激。
谢谢。
编辑:请剪切粘贴您的汇编器输出;我仍然不确定为什么在第二种情况下应该在 vtable 中进行任何查找。