C 11 では、「標準レイアウト」として知られる Plain Old Data (POD) タイプの緩和された定義が導入されました。この定義は、クラスが標準レイアウトとみなされるために満たさなければならない厳格な基準を指定します。この定義の驚くべき側面の 1 つは、データ メンバーのアクセス制御、基本クラスと同じ型を共有するデータ メンバー、および構成クラス内の複数のデータ メンバーの存在に対する制限です。
さまざまなアクセス制御を持つデータ メンバーを許可すると、最初のメンバーと完全なオブジェクトが同じアドレスを持つという重要な要件が崩れてしまいます。これは、標準レイアウト オブジェクトのアドレスをその最初のメンバーへのポインターに有効に変換するために必要です。
最初のデータ メンバーの場合、データ メンバーと基本クラスは同じ型を共有するため、メモリ レイアウトがあいまいになります。派生クラスの前に基本クラスを配置する実装では、アドレスの衝突を防ぐためにパディング バイトが必要になります。これにより、オブジェクト アドレスとその最初のメンバー ポインター間の信頼性の高い変換が再び妨げられます。
単一クラス内では、メンバーは宣言順に順番に割り当てられます。 。ただし、クラス全体にわたって、標準レイアウトでは固定の割り当て順序が指定されていません。構成クラスに複数のデータ メンバーがあると、メモリ内の「最初の」メンバーを決定する際に不確実性が生じます。これは、前述のアドレス変換に不可欠です。
以上がC 11 の「標準レイアウト」ではなぜ厳格なデータ メンバー制約が必要なのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。