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

struct Vector
{
    float x;
    float y;
    float z;
};

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

最佳答案

似乎没有技术原因可以使结构中的浮点数与数组中的浮点数不同。但是仍然缺乏二进制级别的C++标准化。

如果您想安全起见,则可以添加static_assert:

static_assert(offsetof(Vector, y) - offsetof(Vector, x) == sizeof(float));
static_assert(offsetof(Vector, z) - offsetof(Vector, y) == sizeof(float));

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

10-08 08:29
查看更多