如果我在函数中声明一个匿名 union ...
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/