在静态分配的对象上调用虚函数时是否使用虚拟表

时间:2016-11-15 20:00:41

标签: c++ inheritance

以下是一个例子:

struct A {
  virtual int f() const { return 1; }
};

struct B : A {
  virtual int f() const { return 2; }
};

int main() {
  B b;
  cout << b.f() << endl;
}

是否会在f()的实例上调用B进行虚拟表查找?或者是否可能,但编译器可以优化它?

1 个答案:

答案 0 :(得分:2)

取决于编译器和优化选项。

但是作为一项规则,当现代编译器知道对象的派生类型最多时,它将优化(间接)对象上的直接虚拟调用。