union是一种节省空间的类
特点
- 可含有多个数据,但是任意时刻只有一个数据成员可以有值
- 不能含有引用类型的成员
- 成员类型可以包含构造函数或析构函数的类类型
- 默认成员为公有,和struct相同
- 可以指定publi、protected和private等标记
- 不能含有虚函数,不能继承其他类,不能作为基类
定义 及 使用
union Token
{//以下均为public成员char cval;int ival;double dval;
};
默认情况下union是未初始化的
Token first_token = {'a'}; //初始化cval成员
Token last_token; //未初始化的Token对象
Token *pt = new Token; //指向一个未初始化的Token
对象的指针last_token.cval = 'z';
pt->ival = 42;
union的一个数据成员的赋值会令其他数据成员变为未定义状态。
匿名union
编译过程中自动创建一个未命名对象,在匿名union的定义所在的作用域内该union的成员都可以直接被访问。即不能包含protect、private成员,也不能定义成员函数。
union { //匿名unionchar cval;int ival;double dval;
};
cval = 'c';
ival = 42;