C++--問題8--空類占幾個位元組
class A {};
int main(){
cout<<sizeof(A)<<endl;// 輸出 1;
A a;
cout<<sizeof(a)<<endl;// 輸出 1;
return 0;
}
由代碼1可得出:
空類的大小是1, 在C++中空類會占一個位元組,這是為了讓物件的實體能夠相互區別,具體來說,空類同樣可以被實體化,并且每個實體在記憶體中都有獨一無二的地址,因此,編譯器會給空類隱含加上一個位元組,這樣空類實體化之后就會擁有獨一無二的記憶體地址,當該空白類作為基類時,該類的大小就優化為0了,子類的大小就是子類本身的大小,這就是所謂的空白基類最優化,
空類的實體大小就是類的大小,所以sizeof(a)=1位元組,如果a是指標,則sizeof(a)就是指標的大小,即4位元組,
class A { virtual Fun(){} };
int main(){
cout<<sizeof(A)<<endl;// 輸出 4(32位機器)/8(64位機器);
A a;
cout<<sizeof(a)<<endl;// 輸出 4(32位機器)/8(64位機器);
return 0;
}
由代碼2可得出:因為有虛函式的類物件中都有一個虛函式表指標 __vptr,其大小是4位元組 ,
class A { static int a; };
int main(){
cout<<sizeof(A)<<endl;// 輸出 1;
A a;
cout<<sizeof(a)<<endl;// 輸出 1;
return 0;
}
由代碼3可得出:靜態成員存放在靜態存盤區,不占用類的大小, 普通函式也不占用類大小,所以輸出1.
class A { int a; };
int main(){
cout<<sizeof(A)<<endl;// 輸出 4;
A a;
cout<<sizeof(a)<<endl;// 輸出 4;
return 0;
}
class A { static int a; int b; };;
int main(){
cout<<sizeof(A)<<endl;// 輸出 4;
A a;
cout<<sizeof(a)<<endl;// 輸出 4;
return 0;
}
由代碼4,5可得出:靜態成員a不占用類的大小,所以類的大小就是b變數的大小 即4個位元組 ,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/32764.html
標籤:其他
