7

重複の可能性:
C++ の POD 型とは?

Aggregate と POD とは何ですか? また、それらがどのように/なぜ特別なのですか?

私は C++ でインタープリターを作成しています。特定の C++ データ型が、インタープリター コードを介してアクセスされるとき、特にリフレクションを使用するときに、予測可能なレイアウトを持っていることを確認したいと考えています。たとえば、最初のデータ フィールドが常にオブジェクトのアドレスからオフセット 0 になるようにします。これは、純粋な POD タイプの場合は簡単です。ただし、仮想関数や多重継承などの明白なことを避ける限り、これが継承またはコンストラクターを持つオブジェクトでも機能するかどうか疑問に思っています。コンパイラがこれらの型を C コンパイラと同じようにレイアウトすると仮定するのは合理的ですか、それとも C++ 標準の「指定されていない動作」は私が心配する必要があるものでしょうか?

4

1 に答える 1

3

c++11 は標準的なレイアウトを定義します:

標準レイアウトは、C で取得するのと同じレイアウトで何かを作成するという最初の意図を捉えることを目的としています。

これがあなたが探しているものです。したがって、チェックは次のようになります。

static_assert( std::is_standard_layout<A>::value, "not standard layout" );
于 2012-11-05T07:34:30.830 に答える