使用下面的代码,编译器是否可以判断它a
实际上是B
虚拟表查找的一个实例并优化掉?
#include <iostream>
class A
{
public:
virtual void f()
{
std::cout << "A::f()" << std::endl;
}
};
class B : public A
{
public:
void f()
{
std::cout << "B::f()" << std::endl;
}
};
int main()
{
B b;
A* a = &b;
a->f();
return 0;
}
Jonthan Seng 和 reima 回答后的附加问题:如果使用 gcc,是否有必要使用任何标志来强制它优化 vtable 查找?