gpt4 book ai didi

c - "a += a"是未定义的行为,例如 "i = i++"吗?

转载 作者:太空宇宙 更新时间:2023-11-04 02:22:28 24 4
gpt4 key购买 nike

我知道 i = i++ 是 C 中的未定义行为。但我对 a += a 有疑问。这也是未定义的行为吗?

最佳答案

不,a += a 不是未定义的。由于 C 2018 6.5 2 中的这条规则,i = i++ 的行为未由 C 标准定义:

If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.

该规则适用,因为 i++i = 都有更新 i 的副作用,并且它们没有排序。 (尽管 i++ 的值计算会产生用于表达式其余部分的,但它的副作用 更新 i 的顺序与赋值无关。)

a += a中,右操作数(a)的值计算发生在赋值之前(根据6.5.16 3),然后a += 具有更新 a 的副作用。所以:

  • 只有一个副作用,所以没有两个未排序的副作用。
  • aa 的值计算有副作用,但它们是有序的。

关于c - "a += a"是未定义的行为,例如 "i = i++"吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680669/

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