union是一种节省空间的类

特点

  1. 可含有多个数据,但是任意时刻只有一个数据成员可以有值
  2. 不能含有引用类型的成员
  3. 成员类型可以包含构造函数或析构函数的类类型
  4. 默认成员为公有,和struct相同
  5. 可以指定publi、protected和private等标记
  6. 不能含有虚函数,不能继承其他类,不能作为基类

定义 及 使用

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;