c 空類的大小

2021-06-22 02:48:10 字數 1136 閱讀 7002

定義乙個空類,沒有資料

class empty

;class test2:private empty//private繼承

;class test3:public empty//public繼承

;int _tmain(int argc, _tchar* argv)

{ cout << "class test1:"<

class test1:8

class test2:4

class test3:4

而當派生類繼承empty類時,會有所謂的ebo(empty base optimization,空白基類最優化),所以sizeof(test2)和sizeof(test3)都為sizeof(int)=4.

延伸   對齊問題

(環境vs2010 projects-properties-configuration properties-c/c++-->code generation-struct member alignment, 沒有修改過,預設值是default,即8位元組對齊)

若定義乙個class

class align

private:

int i;

則sizeof(align) = 4。

若class align

private:

char a;

int i;

則sizeof(align) = 8。位址圖

char a(佔乙個位址單元)

補齊補齊

補齊int i (佔4個位址單元)

若class align

private:

char a;

short s;

int i;

則sizeof(align) = 8。

char a(佔乙個位址單元)

補齊short s(佔2個位址單元)

int i(佔4個位址單元)

若class align

private:

char a;

int i;

short s;

則sizeof(align) = 12。

char a

補齊補齊

補齊int i

short s

補齊補齊

C 空類大小

class a class b class c public a class d public b,public c 類a,b明明是空類,它的大小應該為為 為什麼 編譯器輸出的結果為 呢?這就是我們剛才所說的例項化的原因 空類同樣可以被例項化 每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目...

c 空類的大小

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...

c 空類的大小

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗,...