如果我在函数中声明匿名联合…
void f(int in) {
union { int i; float f; };
// …
}
…是否存在用于初始化它的语法(除了在另一条语句中分配给
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);
最佳答案
这有效(至少在gcc 4.7.2中):
union { int i; float f; } x = {1};
请注意,类型(即
union
)是匿名的,但其实例称为x
。您尝试实现的功能(例如
union { int i; float f; }{in};
)不会编译,但可以编译。然后,您将创建一个未命名类型的未命名对象(临时对象)。该临时变量将在表达式末尾销毁,因此,该语句无效。那有什么意义呢?关于c++ - 初始化匿名 union 的语法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17368633/