2016-05-30 7 views
-4

私はsizeof(Derived);8で、私のマシン上でこの仮想的に継承されたクラスのサイズがchar 8であるのはなぜですか?

class Empty {}; // Empty class 

class Derived : virtual public Empty 
{ 
     char c; 
}; 

を持って、なぜ?それにはcharが1つしかないので、1であるとは思われませんか?

仮想継承を削除すると、sizeof(Derived);1になります。

+1

コンパイラが実行します。質問を明確にすることはできますか? – Flexo

+1

結果は何ですか?あなたは何を期待し、なぜですか?少なくともあなた自身でその質問を解決する努力を示してください! –

+1

あなたは[documentation](http://en.cppreference.com/w/cpp/language/sizeof)をお読みになりましたか?不明な点は何ですか? – Default

答えて

6

私のマシンでは、sizeof(Derived);は8です。なぜですか?

これはコンパイラが選択したものです。オブジェクトの表現は、仮想ベースのためにより多くのメモリを必要とすることがある。一般的な実装では、オブジェクト内に「仮想テーブルポインタ」が存在します。

文字が1つしかないので、1ではないと思われますか?

号オブジェクトのサイズは、それのメ​​ンバーのサイズの合計「することになっ」ではありません。

関連する問題