非标准布局类的布局限制

a.l*_*ram 6 c++ c++11

编译器是否可以在非标准布局类中重新排序数据?例如,是否允许更改

struct
{
    char x;
private:
    short y;
public:
    char z;
};
Run Code Online (Sandbox Code Playgroud)

至

struct
{
private:
    short y;
public:
    char x;
    char z;
};
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 8

编辑:我最初误解了引用,编译器允许这样做9.2/14:

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

它不能做的是使用相同的访问说明符重新排序属性.

这就是说,我不知道任何实现,即使跨访问说明符,也可以自由重新排序属性.