共有体

共用体 (そのオブジェクトが配列やクラス型でない場合もありますが)メンバーの一覧で 1 種類のオブジェクトのみを含むクラス型またはユーザー定義データ。

union [tag] { member-list } [declarators];
[union] tag declarators;

パラメーター

  • tag
    共用体に指定された型名。

  • member-list
    共用体を含めることができるデータの種類の一覧。「解説」を参照してください。

  • declarators
    共用体の名前を指定する宣言リスト。詳細については、「宣言の概要」を参照してください。

解説

共用体の メンバー リストは 共用体を含めることができるデータの種類を表します。共用体は適切なストレージが メンバー リスト で最も大きいメンバーを保持する必要があります。詳細については共用体の宣言 (C 言語リファレンス) を参照してください。

共用体の宣言

共用体の宣言を共用体のキーワードから開始しメンバー リストを中かっこで囲みます。:

// declaring_a_union.cpp
union DATATYPE    // Declare union type
{
    char   ch;
    int    i;
    long   l;
    float  f;
    double d;
} var1;          // Optional declaration of union variable

int main()
{
}

共用体を使用する

C. では共用体はクラス型の制限付きです。これはアクセス指定子 (パブリックプロテクトプライベート)コンストラクターやデストラクターなどのデータ メンバーおよびメンバー関数を含めることができます。これは仮想関数または静的データ メンバーを含めることはできません。このコントロールは基本クラスとして使用することはできません。基本クラスを指定できます。共用体のメンバーの既定のアクセスはパブリックです。

C. の共用体型でデータ メンバーだけを含めることができます。

15 では共用体変数の宣言に 共用体 のキーワードを使用する必要があります。C++ では 共用体 のキーワードは不要です :

union DATATYPE var2;   // C declaration of a union variable
DATATYPE var3;         // C++ declaration of a union variable

共用体型の変数は共用体で宣言された型の値 1 を保持できます。共用体のメンバーにアクセスするにはメンバー選択演算子 () の使用 :

var1.i = 6;           // Use variable as integer
var2.d = 5.327;       // Use variable as double 

中かっこで囲まれた式を使用すると同じステートメントの共用体を宣言して初期化できます。式は共用体のフィールドの最初に評価され割り当てられます。

使用例

// using_a_union.cpp
#include <stdio.h>

union NumericType
{
    int         iValue;
    long        lValue;  
    double      dValue;  
};

int main()
{
    union NumericType Values = { 10 };   // iValue = 10
    printf_s("%d\n", Values.iValue);
    Values.dValue = 3.1416;
    printf_s("%f\n", Values.dValue);
}

出力

10
3.141600

NumericType の共用体はメモリで次の図に示すように(概念的に配置されます)。

NumericType の共用体のデータの格納

数値型共用体データ ストレージ

参照

関連項目

クラス、構造体、および共有

C++ のキーワード

匿名共用体

クラス (C++)

構造体 (C++)