定义
union即为联合,它是一种特殊的类。通过关键字union进行定义,一个union可以有多个数据成员。例如:
union Token{
char cval;
int ival;
double dval;
};
以上代码定义了一个名为Token的联合,该联合中包含了3个数据成员。
互斥赋值
在任意时刻,联合中只能有一个数据成员可以有值。当给联合中某个成员赋值之后,该联合中的其它成员就变成未定义状态了:
#include <iostream>
using namespace std;
union test
{
char mark;
long num;
float score;
}a;
int main()
{
// cout<<a<<endl; // wrong
a.mark = 'b';
cout<<a.mark<<endl; // 输出'b'
cout<<a.num<<endl; // 98 字符'b'的ACSII值
cout<<a.score<<endl; // 输出错误值
a.num = 10;
cout<<a.mark<<endl; // 输出换行 非常感谢suxin同学的指正
cout<<a.num<<endl; // 输出10
cout<<a.score<<endl; // 输出错误值
a.score = 10.0;
cout<<a.mark<<endl; // 输出空
cout<<a.num<<endl; // 输出错误值
cout<<a.score<<endl; // 输出10
return 0;
}
sizeof( )
定义结构体:
struct student
{
char mark;
long num;
float score;
};
sizeof(struct student)的值为12bytes
但是,当我们定义如下的union时:
union test
{
char mark;
long num;
float score;
};
sizeof(union test)的值为4。
union所占内存空间是共用体中所占空间最大的类型的长度。