等位
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 等位中儲存資料