Вы не знаете, в каком порядке происходят события. В частности, вы делаете предположения о порядке вещей в своем cout <<
заявлении, которое не обосновано.
Происходит что-то вроде следующего
1) The value of `counter` is checked and saved somewhere (the value is zero)
2) `fibo` is called are the result saved somewhere (now `counter` has been incremented)
3) The saved result from `fibo` is printed
4) The saved value of `counter` is printed
Это все совершенно законно до C + +17. В C ++ 17 был изменен язык, в котором говорится, что левая часть <<
должна оцениваться перед правой. Итак, если ваш компилятор установлен на C ++ 17, вы должны получить ожидаемый результат.
С моим компилятором MSV C 2019 и с языком, установленным на C ++ 17, я получаю правильный результат для C + + 17.
0 0 1
1
1 1 1
1
2 1 3
3
3 2 5
5