共用体

共用体 は、そのすべてのメンバーがメモリー内の同じ場所から開始する ということを除けば、構造体に類似したオブジェクトです。 共用体は、一度に、そのメンバーのうちの 1 つの値しか含むことができません。 static ストレージを持つ共用体のデフォルトの初期化指定子は最初のコンポーネントの デフォルトであり、automatic ストレージを持つ共用体には何も含まれません。

共用体に割り振られるストレージは、共用体の最も大きいメンバーで必要なストレージです (これに、最も厳格な要件を持つメンバーの自然境界で共用体が終了するのに必要な埋め込みが加わります)。 このため、可変的に変更され る型は共用体メンバーとして宣言できません。すべての共用体のコンポーネントは、メモリー内で効果的にオーバーレイされます。 つまり、共用体の各メンバーは共用体の開始時に始動するストレージが割り振られ、一度に 1 メンバーしか そのストレージを占有することができません。

C 最初のメンバーだけでなく共用体の任意のメンバーを、指定機能を使用して初期化できます。 共用体の指定された初期化指定子は、構造体と同じ構文を持ちます。 以下の例において、指定機能は .any_member、初期化指定子は {.any_member = 13 } です。

union { /* ... */ } caw = { .any_member = 13 };

互換共用体

C 共用体の定義ごとに、同じソース・ファイルにある他の共用体型とは異なるか、 または互換性のない新規の構造体型を作成します。 ただし、すでに定義された共用体型への参照で ある型指定子は同じ型です。 共用体タグが、参照と定義を関連付け、型名として効果的に機能します。

C++ C++ では、共用体は、クラス型の限定された形式です。 それには、アクセス指定子 (public、protected、private)、メンバー・データ、メンバー関数 (コンストラクターおよびデストラクターを含む) を含めることができます。 それには、仮想メンバー関数または静的データ・メンバーを含めることはできません。 共用体のメンバーのデフォルトのアクセスは public です。 共用体は、基底クラスとして使用できず、また基底クラスから派生できません。

C++ は、共用体メンバーの許容データ型に制限を追加します。C++ の共用体メンバーは、 コンストラクター、デストラクター、または多重定義コピー代入演算子を持つクラス・オブジェクトにすることは できません。共用体メンバーは、static というキーワードでは宣言できません。

関連参照

IBM Copyright 2003