为什么标准布局类的成员必须具有相同的访问控制

Why must members of standard layout classes have the same access control?

本文关键字:访问控制 标准 布局 成员 为什么      更新时间:2023-10-16

引用 [class.prop]/3 中的标准:

在以下情况下,类 S 是标准布局类

  • 对所有非静态数据成员具有相同的访问控制,

我的理解(也许我错了)一直是C++访问控制不会以任何方式影响类的物理布局 - 它们纯粹是一种增强封装的编译时机制。(或者换句话说,将成员从私有更改为公共并不是 ABI 的突破性更改。

如果是这种情况,那么对标准布局类进行此限制的原因是什么?

访问控制确实会影响布局:在一个访问控制级别,非静态数据成员的地址按声明顺序增加,但对不同访问级别的地址没有要求。

由于标准布局是关于成员地址的,因此该要求可确保所有成员地址都按明确定义的顺序排列。