5.10 union¶
简介¶
联合union是一种特殊的类,一个union可以有多个数据成员,但是在任意时刻只有一个数据成员有值。当我们给union的某个成员赋值之后,该union的其他成员就变成未定义的状态了。
Tips:分配给一个
union对象的存储空间至少要能容纳它的最大的数据成员。
定义union¶
union提供了一种有效的途径使得我们可以方便地表示一组类型不同的互斥值。举个例子,假设我们需要处理一些不同种类的数字数据和字符数据,则可以定义一个union来保存这些值:
// Token类型的对象只有一个成员, 该成员的类型可能是下列类型中的任意一个
union Token {
// 默认情况下成员是公有的
char cval;
int ival;
double dval;
};
使用union类型¶
和其他内置类型一样,默认情况下union是未初始化的,我们可以像显式地初始化聚合类一样用一对花括号内的初始值显式地初始化一个union:
Token first_token = {'a'}; // 初始化cval成员, 如果提供初始值则用于初始化第一个成员
Token last_token; // 未初始化的Token对象
Token *pt = new Token; // 指向一个未初始化的Token对象的指针
匿名union¶
// 定义一个匿名union, 我们可以直接访问它的成员
union {
char cval;
int ival;
double dval;
};
cval = 'a'; // 为匿名union赋一个新值
ival = 42; // 该对象当前保存的值是42