struct Vec
{
union { float x, r, h; };
union { float y, g, s; };
union { float z, b, v; };
};
我想问,C++标准是否保证这些数据会对齐完全一样就像我写的一样
struct Vec
{
float x, y, z;
};
所以地址
y
紧跟在x
的地址加上float
的长度+填充位/对齐?
认为确实如此,但很好奇 ISO C++ 标准是否能保证?
认为确实如此,但很好奇它是否得到 ISO C++ 标准的保证?
不是,
union
或float
成员之间可以有任意填充。
但是,如果没有充分的理由添加这样的填充,那么添加它就没有任何意义。类布局是 ABI 的一部分,因此在编译所采用的 C++(或底层 C)ABI 规范中指定。您可以在其中获得针对您的特定编译器/平台组合的明确答案。