以下代码是否可以交叉编译?
struct Foo {
alignas(1) char c1;
alignas(1) char c2;
alignas(4) int i;
};
static_assert(sizeof(Foo) == (sizeof(int) + 4), "No cross-compilable");
换句话说,对于任何架构/平台,是否保证sizeof(Foo) == (sizeof(int) + 4)
?
答案 0 :(得分:2)
不是没有保证。这将适用于当今的许多架构,但在具有8字节int
(在8字节边界上对齐)的系统上,这不会起作用。但是,在这种情况下,您应该获得编译器诊断,因为您正在尝试对int
应用不太严格的对齐;见[dcl.align]。