Tag: standard layout

为什么C ++ 11的POD“标准布局”定义是这样的?

我正在研究C ++ 11中新的轻松的POD定义(第9.7节) 标准布局类是一个类: 没有types非标准布局类(或这种types的数组)的非静态数据成员或引用, 没有虚函数(10.3),没有虚基类(10.1), 对所有非静态数据成员都具有相同的访问控制 (第11章) 没有非标准的布局基类, 在大多数派生类中最多有一个非静态数据成员 , 最多有一个基类具有非静态数据成员 ,或者没有包含非静态数据成员的基类, 没有与第一个非静态数据成员相同types的基类。 我已经突出了一些让我感到惊讶的东西。 如果我们容忍具有不同访问控制的数据成员,会出现什么问题呢? 如果第一个数据成员也是基类,会出现什么问题呢? 即 struct Foo {}; struct Good : Foo {int x; Foo y;}; struct Bad : Foo {Foo y; int x;}; 我承认这是一个奇怪的build筑,但为什么Bad应该禁止,但Good ? 最后,如果不止一个组织成员有数据成员,会出现什么问题?