Инкрементное назначение - PullRequest
1 голос
/ 23 сентября 2011

Я работаю с 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 обновляется, когда мы используем добавочное присваивание + =

Есть мысли?

Ответы [ 3 ]

7 голосов
/ 23 сентября 2011

< имеет более низкий приоритет, чем +.

c = c + a > b; интерпретируется как c = (c + a) > b;

Это просто так, не должно быть причины,но если бы он был, возможно, люди чаще сравнивали арифметические выражения, чем использовали результаты сравнений в арифметических выражениях ..

2 голосов
/ 23 сентября 2011

В первой строке c + a > b равно true, что конвертируется в 1, поэтому в первой строке читается c = 1; Промыть и повторить.

1 голос
/ 23 сентября 2011

Компилятор интерпретирует ваш код как c = (c + a)> b, где вы, вероятно, хотите, чтобы он интерпретировался как c = c + (a> b).

...