共用体(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,程序员负责确定当前哪个成员是活动的。