对非标准布局类的布局限制

Layout restriction on a non-standard layout class

本文关键字:布局 非标准      更新时间:2023-10-16

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

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

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

EDIT:我最初记错了引号,编译器可以根据9.2/14:这样做

具有相同访问权限的(非并集)类的非静态数据成员控制权(第11条)的分配是为了让以后的成员拥有更高的控制权类对象中的地址。非静态的分配顺序未指定具有不同访问控制的数据成员(11)。实施一致性要求可能导致两个相邻成员不得紧接在一起分配;所以可能管理虚拟功能的空间要求(10.3)和虚拟基类(10.1)

它不能用相同的访问说明符对属性进行重新排序。

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