union
- 特殊的类类型,一次只能持有它的一个非static数据成员
- 可以有成员函数,但是没有虚函数
- 没有基类,也不能作为基类
- 不能有引用类型的数据成员
- 默认访问级别为public
- 大小为最大数据成员的大小
匿名union
int main()
{
union { int a; const char* p; };
a = 1;
p = "Jennifer";
}
union-like class
#include <iostream>
// S has one non-static data member (tag), three enumerator members,
// and three variant members (c, n, d)
struct S
{
enum {CHAR, INT, DOUBLE} tag;
union {
char c;
int n;
double d;
};
};
void print_s(const S& s)
{
switch(s.tag)
{
case S::CHAR: std::cout << s.c << '\n'; break;
case S::INT: std::cout << s.n << '\n'; break;
case S::DOUBLE: std::cout << s.d << '\n'; break;
}
}
int main()
{
S s = {S::CHAR, 'a'};
print_s(s);
s.tag = S::INT; s.n = 123;
print_s(s);
}