我工作的C++: 以下是代碼片段:爲什麼類的大小是1字節的union union成員?
class my
{
union o
{
int i;
unsigned int j;
};
union f
{
int a;
unsigned int b;
};
};
我發現班級的大小「我」是1個字節。我不明白爲什麼值是1個字節? 任何人都可以解釋我這個結果嗎?
我工作的C++: 以下是代碼片段:爲什麼類的大小是1字節的union union成員?
class my
{
union o
{
int i;
unsigned int j;
};
union f
{
int a;
unsigned int b;
};
};
我發現班級的大小「我」是1個字節。我不明白爲什麼值是1個字節? 任何人都可以解釋我這個結果嗎?
你的班級是空的,它包含兩個工會類型聲明,但沒有數據成員。通常空類的大小不爲零,如解釋here
聯合是一種用戶定義的數據或類類型,在任何給定時間,其成員列表中只包含一個對象。所以不要期望從課程中爲每個工會分配8個字節。
您還定義了聯合類型,但您並未爲其啓動/分配空間。由於類媒體鏈接定義它沒有零的大小,它是1個字節來檢查,如果類中定義或不..
@RithchiHindle答案在同一鏈接仍然存在..
雖然你有2你的代碼中的工會仍然還沒有分配..即使在你創建了同一個類的對象並檢查了大小之後,你將再次獲得大小爲1,因爲內存沒有被初始化爲相同的..如果你已經創建了你的工會的一個例子,你會得到8個字節的大小
你會發現my::o
和my::f
有一個適合其內容(通常4字節)的大小。但由於my::f
或my::o
實際上並不屬於你的class
,所以在課堂上只是聲明,他們並沒有佔用課堂空間。
一個類似的例子將是:
類其他 { 的typedef炭MYTYPE [1024]; };
now,other::mytype
將是1024字節長,但other
仍不包含mytype
的成員。
可能是這將解釋你的原因.. http://stackoverflow.com/questions/621616/c-what-is-the-size-of-an-object-of-an-empty -class – Dinesh
你使用什麼編譯器? –
@RichieHindle還是呢? – UldisK