在工会之间传递价值的正确方法是什么?

R.A*_*tin 2 c unions language-lawyer

如果你有:

typedef union value {
    int i;
    float f;
} VALUE;
VALUE a, b;
Run Code Online (Sandbox Code Playgroud)

如果你知道a的类型,你应该这样做吗?

b.i = a.i;
b.f = a.f;
Run Code Online (Sandbox Code Playgroud)

要么

if(a_type == INT)
    b.i = a.i;
if(a_type == FLOAT)
    b.f = a.f;
Run Code Online (Sandbox Code Playgroud)

Eri*_*hil 6

只是使用,b = a除非有特殊原因没有,例如联合偶尔包含大量数据,并且您希望在仅包含少量数据的情况下优化分配.

根据C 2011 [N1570] 6.5.16.1 1,简单分配的可接受情况之一是:

左操作数具有与右侧类型兼容的结构或联合类型的原子,限定或非限定版本.

按6.2.7 1:

如果类型相同,则两种类型具有兼容类型.

(根据6.2.6.1 6,"结构或联合对象的值永远不是陷阱表示,即使结构或联合对象的成员的值可能是陷阱表示.")