Недавно я столкнулся с этим вопросом: понимание цепочки операторов.
Отвечая на этот вопрос, я начал сомневаться в собственном понимании поведения оператора присваивания +=
или любого другого operator=
(&=
, *=
, /=
и т.д.).
Мой вопрос в том, когда переменная a
в приведенных ниже выражениях обновляется, чтобы ее измененное значение отражалось в других местах выражения во время оценки и какова его логика? Пожалуйста, взгляните на следующие два выражения:
Выражение 1
a = 1
b = (a += (a += a))
//b = 3 is the result, but if a were updated in place then it should've been 4
Выражение 2
a = 1
b = (a += a) + (a += a)
//b = 6 is the result, but if a is not updated in place then it should've been 4
В первом выражении, когда вычисляется самое внутреннее выражение (a += a)
, кажется, что он не обновляет значение a
, поэтому результат получается как 3
вместо 4
.
Однако во втором выражении значение a
обновляется, поэтому результат равен 6.
Когда мы должны считать, что значение будет отражено в других местах в выражении и, когда мы не должны? a