使用下面的代碼,編譯器是否可以告訴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恆生和reima的答案後
其他問題:在使用GCC的情況下,有必要使用任何標誌,迫使它來優化虛函數表查找?
找出肯定的唯一方式是看裝配。但是,是的,devirtualization是標準的編譯器優化。 – Mysticial
剛剛爲GCC添加了反彙編。我使用'-O1'標誌進行基本的優化。 – reima