此常见问题解答涉及聚合和POD,并涵盖以下材料:
我正在研究C++ 11中新的,轻松的POD定义(第9.7节)
标准布局类是一个类:
- 没有非标准布局类(或此类类型的数组)或引用类型的非静态数据成员,
- 没有虚函数(10.3),也没有虚基类(10.1),
- 对所有非静态数据成员具有相同的访问控制(第11条),
- 没有非标准布局基类,
- 或者在最派生类中没有非静态数据成员,并且最多只有一个具有非静态数据成员的基类,或者没有具有非静态数据成员的基类,并且
- 没有与第一个非静态数据成员相同类型的基类.
我突出了让我感到惊讶的一些事情.
如果我们容忍具有不同访问控制的数据成员会出什么问题?
如果第一个数据成员也是基类会出什么问题?即
struct Foo {};
struct Good : Foo {int x; Foo y;};
struct Bad : Foo {Foo y; int x;};
Run Code Online (Sandbox Code Playgroud)
我承认这是一个奇怪的结构,但为什么要Bad被禁止但不是Good?
最后,如果不止一个组成类有数据成员,会出现什么问题?