C ++ 11の新しいリラックスしたPOD定義を調べています(セクション9.7)
標準レイアウトクラスは、次のようなクラスです。
- タイプnon-standard-layoutクラス(またはそのようなタイプの配列)または参照の非静的データメンバーはありません。
- 仮想関数(10.3)および仮想基本クラス(10.1)がなく、
- すべての非静的データメンバーに対して同じアクセス制御(条項11)があり、
- 非標準レイアウトの基本クラスはありません。
- 最も派生したクラスに非静的データメンバーがなく、非静的データメンバーを持つ基本クラスが多くても1つないか、非静的データメンバーを持つ基本クラスがない。
- 最初の非静的データメンバーと同じタイプの基本クラスはありません。
私は私を驚かせたビットを強調しました。
さまざまなアクセス制御を持つデータメンバーを許容した場合、何が問題になりますか?
最初のデータメンバーが基本クラスでもあった場合、何が問題になりますか?すなわち
struct Foo {};
struct Good : Foo {int x; Foo y;};
struct Bad : Foo {Foo y; int x;};
私はそれが奇妙な構造であることを認めます、しかしなぜ禁止されるべきBad
であるが禁止されるべきではないのGood
ですか?
最後に、複数の構成クラスにデータメンバーがある場合、何が問題になりますか?