共用方式為


等位

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++)