联合
union 是用户定义的数据或类的类型,它在任何给定时间仅包含成员列表中的一个对象。 对象可以是数组或类的类型)。
union [tag] { member-list } [declarators]; [union] tag declarators;
参数
tag
为联合提供的类型名称。member-list
联合可以包含的数据类型的列表。 请参阅“备注”。declarators
指定联合名称的声明符列表。 有关更多信息,请参见声明符概述。
备注
联合的 member-list 表示联合可以包含的数据类型。 联合需要足够的存储区来将最大成员保留到其 member-list 中。 有关详细信息,请参阅联合声明(C 语言参考)。
声明联合
利用 union 关键字开始联合的声明,并用大括号包含成员列表:
// declaring_a_union.cpp
union DATATYPE // Declare union type
{
char ch;
int i;
long l;
float f;
double d;
int *int_ptr;
} var1; // Optional declaration of union variable
int main()
{
}
使用联合
C++ 联合是类类型的受限形式。 它可以包含访问说明符(公共、保护、专用)、成员数据和成员函数(包括构造函数和析构函数)。 它不能包含虚函数或静态数据成员。 它不能用作基类,也不能具有基类。 联合中的成员的默认访问是公共的。
在 C++ 中,无需在声明联合变量时使用 union 关键字。
DATATYPE var3; // C++ declaration of a union variable
联合类型的变量可以保留联合中声明的任何类型的值。 使用成员选择运算符 (.) 访问联合中的成员:
var1.i = 6; // Use variable as integer
var2.d = 5.327; // Use variable as double
可以通过指定包含在括号中的表达式来在相同语句中声明并初始化联合。 计算该表达式并将其分配给联合的第一个字段。
示例
#include <iostream>
using namespace std;
union NumericType
{
int iValue;
long lValue;
double dValue;
};
int main()
{
union NumericType Values = { 10 }; // iValue = 10
cout << Values.iValue << '\n';
Values.dValue = 3.1416;
cout << Values.dValue);
}
输出
10
3.141600
NumericType 联合排列在内存中(概念性的),如下图所示。
NumericType 联合中的数据存储