以下のようなコードでは、コンパイラはa
が実際にB
のインスタンスであり、仮想テーブルの参照を最適化すると伝えることができますか? Jonthanセンとreimaの解答後に仮想テーブルの参照の最適化
#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;
}
追加質問:GCCが使用されている場合は、vtableの検索を最適化するために、それを強制するために、任意のフラグを使用する必要でしょうか?
確実に見つけるための唯一の方法は、アセンブリを見ることです。しかし、はい、devirtualizationは標準コンパイラの最適化です。 – Mysticial
GCCの分解を追加しました。私は基本的な最適化のために '-O1'フラグを使いました。 – reima