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

时间:2019-01-07 02:12:24

标签: c++ language-lawyer standard-layout

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

  

如果满足以下条件,则类S为标准布局类

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

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

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

1 个答案:

答案 0 :(得分:1)

访问控制很大程度 会影响布局:内一个访问控制级别,非静态数据成员的地址按声明顺序增加,但是对彼此之间具有不同访问级别的地址。

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