要点:
- 任意时刻只有一个值可以有值,给其中一个成员赋值后,其他成员自动变为未定义状态。
- union的对象的存储
- union不能含有引用类型的成员
- c++11中,含有构造函数和析构函数的类型可以作为其成员(复杂,这里不讨论)
- 可以为其成员指定为public、protected、private等保护标记,默认为public
- 可以有匿名union
练习题:
关于union的内存分配:
eg.1
#include<iostream>
using namespace std;
union foo{
int i;
char c;
double k;
};
int main()
{
foo x;
cout<<sizeof(x)<<endl; // 8
cout<<sizeof(x.i)<<endl; // 4
cout<<sizeof(x.c)<<endl; // 1
cout<<sizeof(x.k)<<endl; // 8
return 0;
}
eg.2