gpt4 book ai didi

c++ - union 成员之间的分配

转载 作者:IT老高 更新时间:2023-10-28 22:40:42 26 4
gpt4 key购买 nike

这段代码定义明确吗?

int main()    
{
union
{
int i;
float f;
} u;

u.f = 5.0;
u.i = u.f; // ?????
}

它在一个表达式中访问两个不同的 union 成员,所以我想知道它是否违反了 [class.union]/1 关于 union 的事件成员的规定。

C++ 标准似乎没有详细说明哪些操作会更改内置类型的事件成员,以及如果读取或写入非事件成员会发生什么。

最佳答案

The assignment operator (=) and the compound assignment operators all group right-to-left. [...] In all cases, the assignment is sequenced after the value computation of the right and left operands, and before the value computation of the assignment expression. [...]

[N4431 §5.18/1]

在您的情况下,左侧的值计算(仅涉及成员访问,而不是读取)不会导致未定义的行为的前提下,我将按以下方式应用上述内容:

  1. 右侧的值计算读取u.f,是 union 的活跃成员。所以一切都很好。
  2. 分配已执行。这涉及将获得的结果写入 u.i现在会更改 union 的事件成员。

关于c++ - union 成员之间的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31823874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com