如果我在函数中声明一个匿名联合......
void f(int in) {
union { int i; float f; };
// …
}
Run Code Online (Sandbox Code Playgroud)
...是否存在初始化它的语法(除了分配给另一个语句i或f在另一个语句中?快速查看规范表明没有.明显的不编译:
// 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)
这有效(至少在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};)不会编译,但假设它确实如此.然后,您将创建一个未命名类型的未命名对象(临时).临时表将在表达式结束时销毁,因此,此语句将不起作用.那有什么意义呢?