为什么以下给定表达式会调用未定义的行为?
int i = 5;
i = (i,i++,i) + 1
我的问题受这里Als 问题的影响
它不是未定义的。
在这里回答了 C、序列点和偏序
我认为这同样适用于 C++(这是我在看到该链接之前的回复):
逗号运算符引入了一个序列点(并在一定程度上限制了表达式必须被评估的顺序——从左到右),所以:
i
由序列点(第二个逗号)分隔。i
in的修改i++
通过序列点与其他所有内容分开。i
by=
的修改没有与表达式中最后出现的 of 分开i
,但这没关系,因为我们可以在i
没有中间序列点的情况下访问和修改它,前提是访问是“确定要存储的值”( 5/4)。因为标准中没有定义后增量或分配中的哪一个将首先发生;由编译器实现来决定它们的顺序。
在 C++ 中未定义为自身分配递增的值:
i = i++
这之后应该i
是什么?它应该是前一个值还是前一个值加一?执行顺序留给编译器,所以不同的平台会有不同的结果。