我对此处提供的解释有疑问http://www.parashift.com/c++-faq/virtual-functions.html#faq-20.4
在示例代码中的函数mycode(Base *p),调用virt3方法为p->virt3().在这里,编译器如何知道virt3是在第三个插槽中找到的vtable?它如何与之比较?
当编译器看到Base它的定义时,vtable根据某个算法1决定它的布局,这对于所有派生类来说都是常见的,只要Base涉及从中继承的方法(派生类可以添加其他virtual方法,但它们被放入vtable 后面)继承自的东西Base).
因此,编译器看到的时候p->virt3(),就已经知道了,从继承的任何对象Base的指针正确virt3的,例如在的第三个插槽vtable(因为这是它奠定了vtable中Base在其定义的时刻),因此它可以正确生成虚拟调用的代码.
长话短说(从@DavidRodríguez的评论中获取灵感):它知道它留在哪里因为他之前决定过.