为什么标准布局 类 的成员必须具有相同的访问控制?
Why must members of standard layout classes have the same access control?
引用[class.prop]/3中的标准:
A class S is a standard-layout class if it:
- has the same access control for all non-static data members,
我的理解(也许我错了)一直是 C++ 访问控制不会以任何方式影响 class 的物理布局——它们纯粹是一种编译时机制增强封装。 (或者换句话说,将成员从私有更改为 public 并不是破坏 ABI 的更改。)
如果是这种情况,那么对标准布局进行此限制的原因是什么 classes?
访问控制非常确实影响布局:在一个访问控制级别内,非静态数据成员的地址在声明中增加顺序,但对不同访问级别的地址没有要求。
由于标准布局是关于成员地址的,因此要求确保所有成员地址都按明确定义的顺序排列。
引用[class.prop]/3中的标准:
A class S is a standard-layout class if it:
- has the same access control for all non-static data members,
我的理解(也许我错了)一直是 C++ 访问控制不会以任何方式影响 class 的物理布局——它们纯粹是一种编译时机制增强封装。 (或者换句话说,将成员从私有更改为 public 并不是破坏 ABI 的更改。)
如果是这种情况,那么对标准布局进行此限制的原因是什么 classes?
访问控制非常确实影响布局:在一个访问控制级别内,非静态数据成员的地址在声明中增加顺序,但对不同访问级别的地址没有要求。
由于标准布局是关于成员地址的,因此要求确保所有成员地址都按明确定义的顺序排列。