Lyb*_*rta 5 c++ struct padding language-lawyer
给定一个包含相同基本类型序列的结构,如下所示:
struct Vector
{
float x;
float y;
float z;
};
Run Code Online (Sandbox Code Playgroud)
会员之间可以填充吗?我得到了[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));
Run Code Online (Sandbox Code Playgroud)
此外,您还可以通过非跨平台的方式禁用填充。对于 Visual Studio,您需要#pragma pack使用属性 。对于 gcc,您需要使用属性packed。