编译器是否可以在非标准布局类中重新排序数据?例如,是否允许更改
struct
{
char x;
private:
short y;
public:
char z;
};
到
struct
{
private:
short y;
public:
char x;
char z;
};
答案 0 :(得分:8)
9.2/14
执行此操作:
具有相同访问权限的(非联合)类的非静态数据成员 控制(第11条)被分配,以便后来的成员有更高的 类对象中的地址。非静态分配的顺序 具有不同访问控制的数据成员未指定(11)。 实现对齐要求可能会导致两个相邻成员 不要在对方之后立即分配;可能 管理虚拟功能的空间要求(10.3)和 虚基类(10.1)
它不能做的是使用相同的访问说明符重新排序属性。
那就是说我不知道任何可以自由重新排序属性的实现,甚至跨访问说明符。