聲明
union one4a11 { int int_val; long long_val; double double_val; };
可以使用one4all變量來存儲int、long、或double,條件是在不同的時間進行:
one4all pail; pail.int_val=15; cout<<pail.int_val; pail.double_val=1.38; cout<<pail.double_val;
因此,pail有時可以是int變量,而有時又可以是double變量。成員名稱標識了變量的容量。由於共用體每次只能存儲一個值,因此它必須有足夠的空間來存儲最大的成員,所以,共用體的長度為其最大成員的長度。
共用體的用途之一是,當數據項使用兩種或更多種格式(但不會同時使用)時,可節省空間。例如,假設管理一個小商品目錄,其中有一些商品的ID為整數,而另一些的ID為字符串。在這種情況下,可以這樣做:
struct widget//小商品 { char brand[20] int type;//類型 union id { long id_num;//整數 char id_char[20];//字符串 }id_val; }; … widget prize; … if(prize.type==1) cin>>prize.id_val.id_num;使用成員的名字顯示模式 else cin>>prize.id_val.id_char;
匿名共用體沒有名稱,其成員將成為位於相同地址處的變量。顯然,每次只有一個成員是當前的成員:
struct widget { char brand[20];//商標 int type;//類型 union { long id_num; char id_char[20]; }; }; … widget prize; … if(prize.type==1) cin>>prize.id_num; else cin>>prize.id_chat;
由於共用體是匿名的。因此id_num和id_char被視為prize的兩個成員,它們的地址相同所以不需要中間標識符id_bal。程序員負責確定當前哪個成員是活動的。
共用體常用於(但並非只能用於)節省內存。另外,共用體常用於操作系統數據結構或硬件數據結構。