共用体(union)是一种数据格式,同一时间只能存储其中一种类型。共用体的长度是最大成员的长度。用途是节省空间。
假设有个商品目录,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) {cout << prize.id_val.id_num << endl;} else {cout << prize.id_val.id_char << endl;}
匿名共用体(anonymous union)没有名称,成员位于相同地址处:
struct widget{char brand[20];int type;union{long id_num;char id_char[20];};};widget prize;if (prize.type == 1) {cout << prize.id_num << endl;} else {cout << prize.id_char << endl;}
由于共用体是匿名的,因此 id_num、id_char 的地址相同,所以不需要中间标识符 id_val,程序员负责确定当前哪个成员是活动的。
