無名共用体 は、クラス名が付けられていない共用体です。 その後に、宣言子を続けることはできません。 無名共用体は、型ではありません。つまり、名前なしオブジェクトを定義し、 メンバー関数を持つことはできません。
無名共用体のメンバー名は、共用体が宣言されているスコープ内のほかの名前と区別する必要が あります。メンバー・アクセス構文を追加せずに、共用体スコープ内で、メンバー名を直接使用できます。
例えば、次のコードでは、データ・メンバー i および cptr に直接アクセスできます。 これは、これらのデータ・メンバーが、無名共用体を含むスコープにあるから です。i と cptr は、共用体メンバーで、同じアドレスが指定されているので、 一度にいずれか一方のみしか使用できません。 メンバー cptr への代入は、メンバー i の値を変更します。
void f() { union { int i; char* cptr ; }; /* . . . */ i = 5; cptr = "string_in_union"; // overrides the value 5 }
無名共用体は、protected メンバーまたは private メンバーを持つことはできません。
グローバルまたはネーム・スペース無名共用体は、キーワード static を使って宣言される必要が
あります。
関連参照