Для этого конкретного результата сначала оценивается g() + f()
, что в результате приводит к увеличению a
до 10
и получению результата 18
.Это имеет место независимо от того, выполняется ли сначала бит g()
или f()
этой суммы.Выполнение g()
сначала дает 8+10
, иначе это 9+9
.
Затем f()
оценивается, устанавливая a
в 11
и возвращая 11
.
Затемg()
оценивается, устанавливая a
в 12
и возвращая 11
.
Другими словами, вызывает самых правых битов cout
первого ипродолжая влево.
Теперь вы заметите фразу "для этого конкретного результата" в моих рассуждениях выше.Является ли это обязательным требованием стандарта, я точно не знаю (имеется в виду, что в данный момент я не могу его искать), но я очень сильно сомневаюсь в этом, основываясь на опыте.
Итак,хотя он выводит элементы в правильном порядке, побочные эффекты могут различаться в зависимости от большого количества вещей.Это одна из причин, почему глобальные переменные (или, вернее, побочные эффекты на них) редко бывают хорошей идеей, и вам, вероятно, следует переосмыслить их использование: -)