Man*_*nny 5 c java operator-precedence undefined-behavior
int i=2;
i = ++i + ++i + ++i;
Run Code Online (Sandbox Code Playgroud)
哪个更正确?Java的结果是12或C = 13.或者如果不是正确的问题,请详细说明.
Mat*_*hen 26
Java保证(第15.7.1节)它将从左到右进行评估,给出12.具体来说,++具有更高的优先级+.所以它首先绑定那些,然后它从左到右关联添加操作
i = (((++i) + (++i)) + (++i));
Run Code Online (Sandbox Code Playgroud)
§15.7.1表示首先评估左操作数,§15.7.2表示在操作之前评估两个操作数.所以评估如下:
i = (((++i) + (++i)) + (++i));
i = ((3 + (++i)) + (++i)); // i = 3;
i = ((3 + 4) + (++i)); // i = 4;
i = (7 + (++i)); // i = 4;
i = (7 + 5); // i = 5;
i = 12;
Run Code Online (Sandbox Code Playgroud)
在C中,修改变量两次没有序列点是未定义的行为.
Roh*_*hit 17
没有比这更正确的了.它实际上是未定义的,它被称为序列点错误. http://en.wikipedia.org/wiki/Sequence_point
Java结果对我有意义,因为运算符给出了你期望的结果,但没有严肃的程序应该包含这样的语句.
编辑:我很高兴这句话的回答是我当晚得分最高的答案(与我发布的十几个其他答案相比,有些还有代码样本页面).这就是人生.
| 归档时间: |
|
| 查看次数: |
8540 次 |
| 最近记录: |