C ++ 20では、PODの概念は推奨されません。これは、それが些細で標準的なレイアウトであるという意味のない複合特性であるためと考えられます。
不正解です。PODという用語は、重要ではなくなったため廃止されました。
PODという用語は、標準ではもはや目的を果たさず、単に定義されており、他のいくつかのタイプがこの痕跡特性を保持する場合に制限が適用されます。
基本的に、平凡で標準的なレイアウトであるタイプは、自明で標準的なレイアウトであること自体が提供する以上の能力を獲得しません。2つの組み合わせは、型を特別なものにするわけではありません。また、2つのプロパティは、実際には互いにあまり関係がありません。
標準レイアウトとは、空でないサブオブジェクトのレイアウトが明確に定義されていること(および空の基本クラスサブオブジェクトがタイプのレイアウトを妨げないこと)です。自明性とは、オブジェクトが、格納するビットのブロックを超えて何らかの意味を持っているかどうか(任意のビットのブロックで初期化されている場合、概念的には有効なオブジェクトかどうか)です。
タイプを取るテンプレートを作成していて、そのタイプのオブジェクトがT
可能かどうかを確認したい場合memcpy
、そのメンバーのレイアウトは気にしません。TriviallyCopyableかどうかを知りたい。同様に、offsetof
クラスにユーザー指定のコピーコンストラクターがある場合、の正確さはほとんど気になりません。重要なのは、メンバーサブオブジェクトのレイアウトが標準の強制された明確な順序で発生するかどうかだけです。
基本的に、人々は周りを見回してみると、C ++には、単純さと標準レイアウトの共通部分を特に必要とするものは何も残っていないことに気付きました。そのため、期間を予約する必要はありません。いくつかのタイプが「POD」になると規格が明確に述べているこれらのいくつかの場所は、必要に応じて、単純な「標準レイアウト」に単に置き換えることができます。
この再帰的な要件は冗長ですか?
両方の構成要件は個別に再帰的であるため、2つの交差部分も再帰的です。したがって、すべてのサブオブジェクトもPODであることを明示的に示す必要はありません。これは、コピーアンドペーストの奇妙なケースである可能性が高いだけでなく、元の定義では「すべての非静的データメンバーはPOD型である必要があります」のようなものであり、そのステートメントをそのまま保持していました。