2013-11-15 37 views
2

我工作的C++: 以下是代碼片段:爲什麼類的大小是1字節的union union成員?

class my 
{ 
    union o 
    { 
    int i; 
    unsigned int j; 
    }; 

    union f 
    { 
    int a; 
    unsigned int b; 
    }; 
}; 

我發現班級的大小「我」是1個字節。我不明白爲什麼值是1個字節? 任何人都可以解釋我這個結果嗎?

+1

可能是這將解釋你的原因.. http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an-object-of-an-empty -class – Dinesh

+0

你使用什麼編譯器? –

+0

@RichieHindle還是呢? – UldisK

回答

7

你的班級是空的,它包含兩個工會類型聲明,但沒有數據成員。通常空類的大小不爲零,如解釋here

0

聯合是一種用戶定義的數據或類類型,在任何給定時間,其成員列表中只包含一個對象。所以不要期望從課程中爲每個工會分配8個字節。

您還定義了聯合類型,但您並未爲其啓動/分配空間。由於類媒體鏈接定義它沒有零的大小,它是1個字節來檢查,如果類中定義或不..

0

@RithchiHindle答案在同一鏈接仍然存在..

雖然你有2你的代碼中的工會仍然還沒有分配..即使在你創建了同一個類的對象並檢查了大小之後,你將再次獲得大小爲1,因爲內存沒有被初始化爲相同的..如果你已經創建了你的工會的一個例子,你會得到8個字節的大小

1

你會發現my::omy::f有一個適合其內容(通常4字節)的大小。但由於my::fmy::o實際上並不屬於你的class,所以在課堂上只是聲明,他們並沒有佔用課堂空間。

一個類似的例子將是:

類其他 { 的typedef炭MYTYPE [1024]; };

now,other::mytype將是1024字節長,但other仍不包含mytype的成員。