同じタイトルの投稿をお願いしました。しかし、誤解のため、すべての回答は、それが有効なコード/動作であるかどうかについて議論していました。
ただし、主な問題は、最適化が開始されるかどうかについてです。
リンクされた投稿を参照して、本物のケースを参照してください。
D *pD = new D;
pD->foo(); // `D::foo()` is `final`
すべてのコンパイラpD->foo()
は、仮想メカニズムを起動しないことで呼び出しを最適化しますか?
[注:
前の質問で悪いコードの例を挙げたのはなぜですか?
上記の方法でベースから子にキャストすることは、適切なコードではないことを認識しています。主な目的は、最終的な Java のような最適化が行われるかどうかを確認することでした。最初の方法は、アセンブリに行かずにそれを確認できる唯一の方法でした。]