答案 0 :(得分:11)
这不是未定义的。
这里回答了C,Sequence points and partial order
我认为同样适用于C ++(这是我在看到该链接之前的回复):
逗号运算符引入了一个序列点(并在某种程度上约束了表达式必须被评估的顺序 - 在右边之前),所以:
i
的两个修改由序列点(第二个逗号)分隔。i
中i++
的修改与序列点的其他内容分开。i
=
的修改 与表达式中最后一次出现的i
分开,但是没关系,因为我们被允许如果访问是“确定要存储的值”(5/4),则访问i
并在没有插入序列点的情况下对其进行修改。答案 1 :(得分:0)
因为未在标准中定义后增量或分配将首先发生;由编译器实现来决定它们的顺序。
答案 2 :(得分:0)
在C ++中未定义为自身分配增量值:
i = i++
此后i
应该是什么?它应该是前一个值还是一个加上前一个值?执行顺序留给编译器,因此不同的平台会有不同的结果。