6
Visual C++(VS2017 RC)で生成されたコードを見て、単純なケースで動的分岐(仮想呼び出し)を見ていると非常に驚いていました。何devirtualizationが発生していないように見える、一時的およびメンバーケース付き https://godbolt.org/g/RmUku2Visual C++:明白なケースでは、非揮発性化はありませんか?
:
struct Base
{
virtual void foo() = 0;
};
struct Impl : Base
{
void foo() override;
};
Impl g_impl;
void globalCall()
{
g_impl.foo();
}
void localCall()
{
Impl i;
i.foo();
}
void tempCall()
{
Impl().foo(); // dynamic branching generated!
}
struct Class
{
void memberCall();
Impl impl;
};
void Class::memberCall()
{
impl.foo(); // dynamic branching generated!
}
コンパイラエクスプローラリンク:
は、だから私は、コンパイラエクスプローラで次のコードを試してみました。それでは、コンパイラの実装上の問題ですか、そのような結果の技術的な正当な理由はありますか?
「final」を追加しましたか? – Yakk