C++ Primer 笔记——union
1.union是一种特殊的类。一个union可以有多个数据成员,但是在任意时刻,只有一个数据成员可以有值。当我们给union的某个成员赋值之后,该union的其他成员就变成未定义的状态了。分配给一个union对象的空间至少要能容纳它的最大的数据成员。和其他类一样,一个union定义了一种新类型。
2.union不能含有引用类型的成员,C++11新标准中,含有构造函数或析构函数的类类型也可以作为union的成员类型。
3.union可以为其成员指定public,protected和private等保护标记。默认情况下,union的成员都是共有的。
4.union的名字是一个类型名,和其他内置类型一样,默认情况下union是未初始化的。如果提供了初值,则该初始值被用于初始化第一个成员。
5.匿名union是一个未命名的union,并且在右花括号和分号之间没有任何声明。一旦我们定义了一个union,编译器就自动地为该union创建一个未命名的对象。匿名union不能包含受保护的成员或私有成员,也不能定义成员函数。
union { char cval; int ival; }; cval = 'c'; // 该对象当前保存的值是‘c’ ival = 1; // 该对象当前保存的值是1
6.C++的早期版本规定,在union中不能含有定义了构造函数或拷贝控制成员的类类型成员。C++11新标准取消了这一限制。
7.当union包含的是内置类型的成员时,编译器将按照成员的次序依次合成默认构造函数或拷贝控制成员。但是如果union含有类类型的成员,并且该类型自定义了默认构造函数或拷贝控制成员,则编译器将为union合成对应的版本并将其声明为删除的。