it-swarm.com.ru

Что означает операция c = a +++ b?

Следующий код меня смутил

int a=2,b=5,c;
c=a+++b;
printf("%d,%d,%d",a,b,c);

Я ожидал, что результат будет 3,5,8, главным образом потому, что a ++ означает 2 +1, что равно 3, а 3 + 5 равно 8, поэтому я ожидал 3,5,8. Получается, что результат 3,5,7. Может кто-нибудь объяснить, почему это так?

31
user595985

Он анализируется как c = a++ + b, а a++ означает постинкремент, то есть инкремент после получения значения a для вычисления a + b == 2 + 5.

Пожалуйста, никогда напишите такой код.

90
Fred Foo

Максимальное правило Мунка применяется к такому выражению, согласно которому выражение анализируется как:

c = a++ + b;

То есть a является постинкрементным (a++), поэтому текущее значение a (перед постинкрементом) берется для операции + с b.

39
Nawaz

a ++ is post incrementing, то есть выражение принимает значение a и затем добавляет 1.
c = ++ a + b будет делать то, что вы ожидаете.

6
David

Это пример плохого стиля программирования.

Он довольно нечитабелен, однако он публикует приращения a, поэтому он суммирует текущее значение a в b, а затем увеличивает a!

2
Stefano

Согласно правилу Longest Match он анализируется как ++ + + b на этапе лексического анализа компилятора. Отсюда и результат.

1
Vineet G

a ++ оценивается после выражения.

с = ++ а + б; даст вам то, что вы думали.

1
jrok

Оператор постинкремента a ++ изменяет значение tge a после того, как значение a оценено в выражении. Поскольку исходное значение a равно 2, это то, что используется для вычисления c; значение a изменяется, чтобы отразить новое значение после оценки ++.

1
Patrick87

a ++ + b ..it дает результат 7, а после выражения значение a обновляется до 3 из-за оператора постинкремента

1
Aman Agarwal

Здесь c = a +++ b; означает c = (a ++) + b; т.е. после увеличения . В a ++ изменения произойдут на следующем шаге, на котором будут печататься a, b и c. В ++ a, то есть приращении префикса изменения произойдут на том же шаге, и это даст результат 8.

0
Alok Negi