c++ - 类数组结构的填充

标签 c++ struct language-lawyer padding

给定一个包含相同基本类型序列的结构,如下所示:

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/

相关文章:

c++ - 如何解码跟踪器响应中的对等值 (Bittorrent)

c++ - 非法调用非静态成员函数

c++ - 使用库的 Makefile

C - 赋值中不兼容的类型 - 结构和字符数组

C++ 结构初始化

c++ - cos(x) 是否需要在使用 IEEE-754 的不同 C++ 实现中返回相同的值?

c# - 自定义存档格式文件读取

c - 如何交换指针变量以声明一个大小最初未知的数组?

c++ - 具有空 mem-initializer-list 和空主体的构造函数

c++ - 这种语法是非法的吗?