标准对成员变量声明的顺序说什么?

时间:2018-12-07 13:50:19

标签: c++ object memory language-lawyer standards

在C ++中,如果我这样声明一个类/结构:

struct Data
{
    int member0;
    int member1;
};

在大多数编译器中,member0在对象表示中的出现要早于member1

标准指令是否具有这种行为,或者在理论上允许编译器在对象表示形式中将member1放在member0之前?
标准对此要说什么,它在哪里说呢?
(如果强制性行为随时有所变化,我对所有标准版本都感兴趣。)

1 个答案:

答案 0 :(得分:6)

来自[class.mem§19]

  

分配具有相同访问控制的(非联盟)类的非静态数据成员,以便以后的成员在类对象内具有更高的地址。   未指定具有不同访问控制的非静态数据成员的分配顺序。   实施一致性要求可能会导致两个相邻成员不能彼此立即分配;管理虚拟功能和虚拟基类的空间要求也可能如此。

由于您的两个成员都是public,因此保证member0会存储在member1之前。