给定一个包含相同基本类型序列的结构,如下所示:
struct Vector
{
float x;
float y;
float z;
};
它可以在成员之间 填充吗?我得到了 [class.mem] 的链接这表示可以添加填充以实现对齐,但它适用于这种情况吗?
最佳答案
似乎没有技术原因可以使结构中的 float 与数组中的 float 对齐方式不同。但是仍然在二进制级别缺乏 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
。
关于c++ - 类数组结构的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43918916/