C和Java中预增量和后增量运算符的行为
Visual C++
void main()
{
int i = 1, j;
j = i++ + i++ + ++i;
printf("%d\n",j);
}
输出:
6
Java:
public class Increment {
public static void main(String[] args) {
int i = 1, j;
j = i++ + i++ + ++i;
System.out.println(j);
}
}
输出:
7
为什么这两种语言的输出不同?两种语言是如何区别对待增量前和增量后运算符的
# 1 楼答案
在序列点之间点击>。[编辑得更精确。]我不确定Java是否也是如此。但是C++确实是这样。p>
这里有一个很好的参考资料:
Undefined behavior and sequence points
# 2 楼答案
在C/C++中,行为是未定义的,因为在此表达式中
i
在没有插入序列点的情况下被多次修改。阅读:What's the value of i++ + i++?当然,在Java中this kind of codes的行为是定义良好的。 下面是我对Java的逐步回答:
开始时
i
是1