在C ++中,如果我这样声明一个类/结构:
struct Data
{
int member0;
int member1;
};
在大多数编译器中,member0
在对象表示中的出现要早于member1
。
标准指令是否具有这种行为,或者在理论上允许编译器在对象表示形式中将member1
放在member0
之前?
标准对此要说什么,它在哪里说呢?
(如果强制性行为随时有所变化,我对所有标准版本都感兴趣。)
答案 0 :(得分:6)
分配具有相同访问控制的(非联盟)类的非静态数据成员,以便以后的成员在类对象内具有更高的地址。 未指定具有不同访问控制的非静态数据成员的分配顺序。 实施一致性要求可能会导致两个相邻成员不能彼此立即分配;管理虚拟功能和虚拟基类的空间要求也可能如此。
由于您的两个成员都是public
,因此保证member0
会存储在member1
之前。