我最近了解到,
运算符以及它引入了一个事实序列点.
我还了解到以下代码会导致未定义的行为:
i = ++i;
Because i
在两个序列点之间修改了两次。
但是下面的代码呢?
i = 0, ++i;
i = (0, ++i);
虽然我知道规则,但我无法得出结论。那么它是否是定义的行为?
edit:正如@paxdiablo 提到的,定义或未定义,这确实是一个不好的做法应该避免这种情况。提出这个问题只是为了教育目的和更好地理解“规则”。
Yes. =
优先级高于,
,所以这个表达式等价于(i = 0), ++i
. ,
是一个序列点,因此可以保证++i
发生在分配之后。
我不确定是否i = (0, ++i)
虽然已定义。我的猜测是不会;增量和赋值之间没有序列点。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)