6

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

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

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

1 回答 1

8

编辑:我最初记错了报价,编译器可以这样做9.2/14

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

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

也就是说,我不知道有任何实现可以随意对属性进行重新排序,即使跨访问说明符也是如此。

于 2013-06-28T19:28:48.650 回答