繁体   English   中英

“ a + = a”是否是未定义的行为,例如“ i = i ++”?

[英]Is “a += a” an undifined behaviour such as “i = i++”?

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

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

如果相对于相同标量对象的不同副作用或使用相同标量对象的值进行的值计算,相对于标量对象的副作用未排序,则该行为不确定。

该规则适用,因为i++i =都具有更新i副作用,并且它们未排序。 (尽管i++的值计算会产生要在表达式的其余部分中使用的 ,但在赋值之前先对其进行了排序,但其更新i 副作用并未相对于赋值进行排序。)

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

  • 只有一种副作用,因此不会有两种无序的副作用。
  • 有一个副作用a和的值计算a ,但他们测序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM