假设struct A和struct B布局兼容,为什么不A[N]和B[N]布局兼容?它的根本问题是什么?
在以下示例中,通过内部的第二个联合成员访问第一个联合成员会ub()导致未定义的行为。然而,在ok()行为上是明确定义的。
struct A { int i; }; // A and B are
struct B { int j; }; // layout-compatible
union C { A a; B b; };
union D { A a[3]; B b[3]; };
int ok() {
C c { .a = 1 }; // ok, initialize c.a
return c.b.j; // ok, as if c.a.i were nominated
}
int ub() {
D d …Run Code Online (Sandbox Code Playgroud)