C 空類的大小

2022-09-16 21:27:36 字數 1014 閱讀 1783

本文中所說是c++的空類是指這個類不帶任何資料,即類中沒有非靜態(non-static)資料成員變數,沒有虛函式(virtual function),也沒有虛基類(virtual base class)。 

直觀地看,空類物件不使用任何空間,因為沒有任何隸屬物件的資料需要儲存。然而,c++標準規定,凡是乙個獨立的(非附屬)物件都必須具有非零大小。換句話說,

c++空類的大小不為0

為了驗證這個結論,可以先來看測試程式的輸出。

#include using

namespace

std;

class

nomembers

;int

main()

輸出:

the size of an object of empty class is: 1

故使用乙個位元組來區分空類。

值得注意的是,這並不代表乙個空的基類也需要加乙個位元組到子類中去。這種情況下,空類並不是獨立的,它附屬於子類。子類繼承空類後,子類如果有自己的資料成員,而空基類的乙個位元組並不會加到子類中去。例如,

class

empty {};

struct d : public empty ;

sizeof(d)為4。

再來看另一種情況,乙個類包含乙個空類物件資料成員。

class

empty {};

class

holdsanint ;

在大多數編譯器中,你會發現 sizeof(holdsanint) 輸出為8。這是由於,empty類的大小雖然為1,然而為了記憶體對齊,編譯器會為holdsanint額外加上一些位元組,使得holdsanint被放大到足夠又可以存放乙個int。

參考資料 

1. 2. 

3. 4. effective c++, third edition, scott meyers著, 侯捷譯

C 空類大小

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

c 空類的大小

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

c 空類的大小

定義乙個空類,沒有資料 class empty class test2 private empty private繼承 class test3 public empty public繼承 int tmain int argc,tchar argv cout class test1 class tes...