我已经用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=c+a>b之后没有更新;
但是,当我们使用增量赋值时,c的值会被更新+=
有什么想法吗?
最佳答案
<
的优先级低于+
。c = c + a > b;
被解释为c = (c + a) > b;
就是这样,不需要有原因,但如果有原因的话,可能是人们比较算术表达式的次数比在算术表达式中使用比较结果的次数要多。。
关于c - 增量分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7532661/