填充阵列状结构

Lyb*_*rta 5 c++ struct padding language-lawyer

给定一个包含相同基本类型序列的结构,如下所示:

struct Vector
{
    float x;
    float y;
    float z;
};
Run Code Online (Sandbox Code Playgroud)

会员之间可以填充吗?我得到了[class.mem]的链接,说明可以添加填充以实现对齐,但在这种情况下它是否适用?

Nar*_*yan 1

结构体中的浮点数与数组中的浮点数的对齐方式似乎没有技术原因。但C++ 在二进制层面仍然缺乏标准化

如果你想安全,那么你可以添加static_assert

static_assert(offsetof(Vector, y) - offsetof(Vector, x) == sizeof(float));
static_assert(offsetof(Vector, z) - offsetof(Vector, y) == sizeof(float));
Run Code Online (Sandbox Code Playgroud)

此外,您还可以通过非跨平台的方式禁用填充。对于 Visual Studio,您需要#pragma pack使用属性 。对于 gcc,您需要使用属性packed

  • @Lyberta 往往不会引用有关缺乏要求的内容 (2认同)