给定一个包含相同基本类型序列的结构体,类似于:
struct Vector
{
float x;
float y;
float z;
};
成员之间可以有填充吗?我被给予了链接[class.mem],它说可以添加填充以实现对齐,但这是否适用于此情况?
给定一个包含相同基本类型序列的结构体,类似于:
struct Vector
{
float x;
float y;
float z;
};
成员之间可以有填充吗?我被给予了链接[class.mem],它说可以添加填充以实现对齐,但这是否适用于此情况?
static_assert(offsetof(Vector, y) - offsetof(Vector, x) == sizeof(float));
static_assert(offsetof(Vector, z) - offsetof(Vector, y) == sizeof(float));
#pragma pack
,而对于gcc,则需要使用属性packed
。
static_assert
在编译时进行检查。例如,static_assert(sizeof(Vector) == sizeof(float) * 3, "");
。 - François AndrieuxVector
成员之间是否有填充的问题。 - W.F.sizeof(Vector)
是三个浮点数,并且我们知道Vector
至少包含 3 个浮点数,那么就不会有任何一个字节用于填充。 - Quentin