非标准布局类的布局限制

时间:2013-06-28 19:27:39

标签: c++ c++11

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

struct
{
    char x;
private:
    short y;
public:
    char z;
};

struct
{
private:
    short y;
public:
    char x;
    char z;
};

1 个答案:

答案 0 :(得分:8)

编辑:我最初错误地引用了这句话,编译器可以按照9.2/14执行此操作:

  

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

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

那就是说我不知道​​任何可以自由重新排序属性的实现,甚至跨访问说明符。