是[class.prop]/3中的标准:
如果满足以下条件,则类S为标准布局类:
- 对所有非静态数据成员具有相同的访问控制,
我的理解(也许是我误会了)一直是C ++访问控制不会以任何方式影响类的物理布局-它们纯粹是增强封装性的编译时机制。 (或者换句话说,将成员从私人更改为公开并不是ABI的重大更改。)
如果是这种情况,那么对标准布局类进行此限制的原因是什么?
答案 0 :(得分:1)
访问控制很大程度 会影响布局:在内一个访问控制级别,非静态数据成员的地址按声明顺序增加,但是对彼此之间具有不同访问级别的地址。
由于标准布局是关于成员地址的,因此该要求确保所有成员地址都具有定义明确的顺序。