以下是一个例子:
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
进行虚拟表查找?或者是否可能,但编译器可以优化它?
答案 0 :(得分:2)
取决于编译器和优化选项。
但是作为一项规则,当现代编译器知道对象的派生类型最多时,它将优化(间接)对象上的直接虚拟调用。