読み方 : きょうようたい
共用体【union type】
概要

通常の構造体では、定義した各メンバ変数にそれぞれ独立したメモリ領域が割り当てられる。これに対し共用体は、メンバの中で最も大きなデータ型に必要な分だけ領域を確保し、すべてのメンバが同じ先頭アドレスを共有する。
ある時点で値を書き込むと、以前に別の型として保持していたデータは上書きされる。整数を格納した後に文字列を書き込めば、直前の整数値は失われる。型ごとに個別の領域を用意するより少ないメモリで済むため、メモリ資源が限られた組み込みシステムや、低レイヤの通信処理、ファイル形式の解析などで用いられてきた。
C言語やC++言語の仕様では、共用体は現在どの型のデータが格納されているかという情報を自身で保持しない。型の管理は開発者の実装に委ねられており、誤った型として値を読み出すことで未定義動作の原因になりやすい。共用体を使う場合は、現在有効なメンバを別の変数などで管理する方法が一般的である。
こうした課題に対応するため、データ本体とともに現在の型を示す識別子を内部に持つ共用体が用いられることがあり、この識別子を「タグ」という。タグによって、格納されている値が整数なのか文字列なのかといった種類を判別できるため、複数の型を安全に扱いやすくなる。
近年のプログラミング言語では、この仕組みがより安全な機能として再構築されている。C++17で導入された「std::variant」は、現在保持している型をコンパイラが把握できるようにすることで、型の取り違えによるリスクを抑えている。RustやSwiftの「enum」、TypeScriptの判別可能なユニオン型なども同様に、厳密な型検査と組み合わせることで型の誤用を防ぎながら柔軟なデータ構造を表現できるよう設計されている。
(2026.9.14更新)