c++ - 初始化匿名 union 的语法

标签 c++ unions

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

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/

相关文章:

C++ - 与非平凡类成员类型的 union ?

c++ - 在 boost::asio 中为 SSL/TLS 使用特定密码

c++ - 在qt中读取Qfile

c++ - 用于音频输出的简单c++ win控制台程序?

c++ - union 'punning' 结构 w/ "common initial sequence": Why does C (99+), 但不是 C++,规定 'visible declaration of the union type' ?

c++ - 为什么 C++ 不允许匿名结构?

c - 在 C 中使用 union 将 double float 分解为字节

C++ 先前定义错误

c++ - 如何获取Lemon Graph Library中索引为n的节点?

C++ union 成员访问和未定义行为