【发布时间】:2021-02-05 17:07:09
【问题描述】:
我正在尝试使用#pragma pack 打包结构“测试”。
在 VS2019 16.7.2 中,以下静态断言失败。
struct alignas(4 * sizeof(float)) Vec4
{
float x,y,z,w;
};
#pragma pack(push,1)
struct Test
{
char f;
Vec4 vec;
};
#pragma pack(pop)
static_assert(sizeof(Test) == sizeof(char) + sizeof(Vec4), "Incorrect size.");
Test 的大小为 2*sizeof(Vec4),这表明 struct 定义本身的 alignas 超过了 pack。
静态断言在 GCC 10.2 或 Clang 11.0.0 中不会失败。
有谁知道根据需要打包 Test 的方法? (不改变 Vec4 结构的对齐方式)
谢谢。
本
【问题讨论】:
-
"根据需要打包测试?(不改变 Vec4 结构的对齐方式)" --> 更改顺序:
vec然后f可能会起作用。嗯 -
认为这是预期的行为,沿着同一行as "当遇到多个 alignas 说明符时,编译器将选择最严格的一个,(具有最大值的那个)* .
标签: c++ c++11 visual-c++