标准对成员变量声明的顺序有何规定?

Pha*_*rap 0 c++ memory standards object language-lawyer

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

struct Data
{
    int member0;
    int member1;
};
Run Code Online (Sandbox Code Playgroud)

在大多数编译器中,member0在对象表示中出现的比较早member1.

标准是否要求这种行为,或者理论上是否允许编译器放在对象表示member1之前member0
标准对此有何看法,它在哪里说出来?
(如果强制行为在任何时候发生了变化,我对所有标准版本感兴趣.)

Que*_*tin 6

来自[class.mem§19]:

分配具有相同访问控制的(非联合)类的非静态数据成员,以便后面的成员在类对象中具有更高的地址.未指定具有不同访问控制的非静态数据成员的分配顺序.实施对齐要求可能导致两个相邻成员不能立即分配; 因此可能需要空间来管理虚拟功能和虚拟基类.

由于两个你的会员是public,member0可以保证被之前存储member1.