联合

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 联合中的数据存储

数值类型联合中的数据存储

请参见

参考

类、结构和联合

C++ 关键字

匿名联合

class (C++)

struct (C++)