C++--問題8-空のクラスは数バイトを占めています

1165 ワード

C++--問題8-空のクラスは数バイトを占めています
class A {};
int main(){
  cout<

コード1から次のことがわかります.
空のクラスのサイズは1で、オブジェクトのインスタンスが互いに区別できるように、C++の中空のクラスが1バイトを占めます.具体的には、空のクラスもインスタンス化でき、各インスタンスにはメモリにユニークなアドレスがあるため、コンパイラは空のクラスに1バイトを隠し、空のクラスがインスタンス化されるとユニークなメモリアドレスを持つようになります.この空白クラスがベースクラスである場合、クラスのサイズは0に最適化され、サブクラスのサイズはサブクラス自体のサイズである.これがいわゆる空白ベースクラス最適化である.
空のクラスのインスタンスサイズはクラスのサイズであるため、sizeof(a)=1バイト、aがポインタであればsizeof(a)はポインタのサイズ、すなわち4バイトである.
class A { virtual Fun(){} };
int main(){
  cout<

コード2から、虚関数のあるクラスオブジェクトには虚関数テーブルポインタが1つあるため、vptrは、4バイトのサイズです.
class A { static int a; };
int main(){
  cout<

コード3から、静的メンバーは静的記憶領域に格納、クラスのサイズを占有せず、通常の関数もクラスのサイズを占有しないため、出力1が得られる. 
class A { int a; };
int main(){
  cout<
class A { static int a; int b; };;
int main(){
  cout<

コード4,5から、静的メンバーaはクラスのサイズを占有しないので、クラスのサイズはb変数のサイズ、すなわち4バイトである.