.
ここで私は空のベースの最適化について議論していましたが、MSaltersは次のような興味深いコメントを残しました。
sizeof(Class)==0、空であろうとなかろうと、どのクラスも持つことはできません。しかし、空の基本クラスのサブオブジェクトのサイズについて具体的に話しています。 独自の vtable も vtable ポインターも必要ありません。オフセット 0 にある vtable ポインターの一般的なレイアウトを想定します。これにより、サイズがゼロの基本クラスのサブオブジェクトがその vtable ポインターを派生クラスと共有することになります。問題ありません。いずれにせよ、それらは同一である必要があります。それが仮想関数のポイントです。
私の質問は具体的には次のとおりです。空のクラスを基本クラスとして使用すると、コンパイラが最適化される場合とそうでない場合があります。それが実際に何をするかをどのように判断しますか?
一般に、基本クラスのサブオブジェクトのサイズを知るにはどうすればよいでしょうか? ベースとして使用するかどうかに関係なく、ベース サブオブジェクトのサイズは同じですか? コンパイラは空の基本クラスのみで最適化しますか?
.