给定一个结构,该结构包含相同基本类型的序列,如下所示:
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
。