共用体
C++の共用体はクラス(および構造体)の一種で、Cの共用体の機能に加え、メンバ関数を持てるなど機能が追加されている。ただし普通のクラス(および構造体)に比べ以下のような制約が加わっている。
継承の機能がない。 基底クラスを持つことができない。 共用体から派生することはできない。 仮想関数を持てない。
静的メンバを持てない。
PODでないクラスのオブジェクト型のメンバを持てない。
参照型のメンバを持てない。
これらの制約の一部はC++11で撤廃された。
また、C++では共用体タグ名を省略して定義することで、スコープを形成しない無名の共用体を作れるようになった。ただし、無名の構造体は許可されていない。
先の制約のために、標準ライブラリのものも含めてほとんどのクラスは共用体に格納できない。これは共用体がタグ情報を持たないために、コンストラクタやデストラクタを正しく実行するコードを自動生成できないからである。そのため、C++で共用体が積極的に利用されることは少ない。
なお、共用体に類似したC++の機能にreinterpret_castがあり、バイト列再解釈の用途にはこちらが用いられることが一般的である。