【发布时间】:2017-05-12 00:20:21
【问题描述】:
给定一个包含相同基本类型序列的结构,如下所示:
struct Vector
{
float x;
float y;
float z;
};
它可以在成员之间有填充吗?我收到了指向 [class.mem] 的链接,上面说可以添加填充以实现对齐,但它适用于这种情况吗?
【问题讨论】:
-
如果引入padding会给你带来问题,你可以尝试使用
static_assert在编译时检查。例如,static_assert(sizeof(Vector) == sizeof(float) * 3, "");。 -
我很确定除了第一个成员之前没有填充并且每个单独的类型都正确对齐之外,您不能假设任何事情。成员之间或之后的 AFAIK 填充符合要求(尽管看似毫无意义)。
-
@FrançoisAndrieux 我不确定它是否真的回答了
Vector成员之间是否有填充 -
@W.F.不,它不能。如果
sizeof(Vector)是三个浮点数,并且我们知道Vector至少包含三个浮点数,那么就不会在任何地方留下一个字节用于填充。 -
@Donnie 这还不错,因为用户可以使用编译器扩展来操作它。
标签: c++ struct language-lawyer padding