我已经使用C ++多年了,但只是意识到增量赋值的一些可疑之处。
我有这个片段
a = 4;
b = 2;
c = 0;
c = c + a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
c = c + a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
c += a < b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
c += a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
c += a > b; printf("a: %d\tb: %d\tc: %d\n",a,b,c);
结果是
a: 4 b: 2 c: 1
a: 4 b: 2 c: 1
a: 4 b: 2 c: 1
a: 4 b: 2 c: 2
a: 4 b: 2 c: 3
如果您注意,前两行是相同的。或者在第一个c = c + a&gt;之后'c'没有得到更新。 b; 但是,当我们使用增量赋值+ =
时,c的值会更新有什么想法吗?
答案 0 :(得分:7)
<
的优先级低于+
。
c = c + a > b;
被解释为c = (c + a) > b;
就是这样,没有必要成为一个理由,但是如果有一个原因,那么人们可能更常比较算术表达式,而不是使用算术表达式中的比较结果。
答案 1 :(得分:2)
在第一行中,c + a > b
为真,转换为1
,因此第一行显示为c = 1;
。冲洗并重复。
答案 2 :(得分:1)
编译器将您的代码解释为c =(c + a)&gt; b您可能希望将其解释为c = c +(a> b)。