15

unionBoost Variant とc/c++のデータ型の違いは何だろうと思っています。unionデータ型が同じメモリ位置を占有し、メモリ領域内の最大のデータ型が使用されるメモリの総量を占めることを知っています。

union space {
   char CHAR;
   float FLOAT;
   int INTEGER;
}S;

intfloatが最大で同じサイズであるため、4 バイトのメモリを占有する必要があります。unionBoost Variant とデータ型の間に他の点で類似点と相違点はありますか? また、Boost Variant は任意のデータ型を取り、データ型の「ポリモーフィズム」を許可することも知っています (OOP トピック ワードを誤用している場合は訂正してください)。したがって、共用体データ型もポリモーフィズムの一種ですか?

4

2 に答える 2

12

Boost バリアントはユニオンをエミュレートしますが、その実装ではユニオンを使用しません。代わりに、アラインされたストレージと新しい配置を使用します。

バリアントにビジター オブジェクトを適用すると、適切なオーバーロードが選択されるという意味でポリモーフィックです。この選択は実行時に行う必要がありますが、このオブジェクト コードはコンパイル時に展開されます。なのでかなり速いです。

于 2013-07-27T19:56:15.823 に答える