如果我在函数中声明匿名联合…

void f(int in) {
    union { int i; float f; };
    // …
}

…是否存在用于初始化它的语法(除了在另一条语句中分配给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);

最佳答案

这有效(至少在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/

10-11 22:35
查看更多