初始化匿名联合的语法

s4y*_*s4y 2 c++ unions

如果我在函数中声明一个匿名联合......

void f(int in) {
    union { int i; float f; };
    // …
}
Run Code Online (Sandbox Code Playgroud)

...是否存在初始化它的语法(除了分配给另一个语句if在另一个语句中?快速查看规范表明没有.明显的不编译:

// Nope:
union { int i = in; float f; };
union { int i; float f; } = in;
union { int i; float f; } = {in};
union { int i; float f; }{in};
union { int i; float f; }(in);
Run Code Online (Sandbox Code Playgroud)

Cas*_*eri 5

这有效(至少在gcc 4.7.2中):

union { int i; float f; } x = {1};
Run Code Online (Sandbox Code Playgroud)

请注意,类型(即union)是匿名的,但它的实例被调用x.

你想要实现的目标(例如union { int i; float f; }{in};)不会编译,但假设它确实如此.然后,您将创建一个未命名类型的未命名对象(临时).临时表将在表达式结束时销毁,因此,此语句将不起作用.那有什么意义呢?