为什么这种不确定的行为?
-
29-09-2019 - |
题
解决方案
它不是不确定的。
在这里回答C, 序列和部分顺序
我认为在C ++中也适用(这是我在看到该链接之前的回答):
逗号运算符引入一个序列(并在一定程度上约束必须评估表达式的顺序 - 左之前),因此::
- 两个修改
i
由序列(第二个逗号)分开。 - 修改
i
在i++
通过序列点与其他所有内容分开。 - 修改
i
经过=
是 不是 从最后一次发生i
在表达中,但这没关系,因为我们可以访问i
如果访问是“确定要存储的值”(5/4),则在没有中间序列的情况下修改它。 - 正如ALS所说,在实践中,该代码是否已定义行为并不重要,因为每个人都有基本的常识不写它;-)
其他提示
因为未在标准中定义了插入后的哪个或任务将首先进行;它留给编译器实施来决定其订单。
它在C ++中不确定,无法为其分配增量值:
i = i++
什么应该 i
之后?应该是先前的值还是一个加上先前的值?执行顺序留给编译器,因此不同的平台将具有不同的结果。
不隶属于 StackOverflow