增量分配

Sri*_*ali 1 c variable-assignment

我已经使用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);
Run Code Online (Sandbox Code Playgroud)

结果是

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
Run Code Online (Sandbox Code Playgroud)

如果你注意,前两行是相同的.或者在第一个c = c + a> b之后'c'没有更新; 但是,当我们使用增量赋值+ =时,c的值会更新

有什么想法吗?

Pas*_*uoq 7

<优先级低于+.

c = c + a > b; 被解释为 c = (c + a) > b;

就是这样,没有必要成为一个理由,但如果有一个原因,那么人们可能会更多地比较算术表达式而不是使用算术表达式中的比较结果.