Ссылка на передаваемый аргумент

#include<iostream>
using namespace std;
int F(int a, int &b) {
a = a + 1;
b = b - 1;
return a;
}

int main() {
int a = 5, b = 6;
cout << F(a, b) << a << b;
}

По идеи вывод 655 . Но << b выводит 6, почему так? Мы же ссылаемся на неё и меняем её значение в F(a,b). В итоге ответ 656


Ответы (1 шт):

Автор решения: Harry

Вы передаете a по значению. Поэтому исходное a остается неизменным, а F возвращает увеличенное значение копии a, т.е. 6.

b передается по ссылке, так что его значение уменьшается и после вызова становится равным 5.

Т.е. вывод должен быть 655, но! только начиная со стандарта С++17, который закрепил требование выводить << поочередно. До C++17 стандарт разрешает вычислять аргументы функций так, как удобно компилятору - а << - не более чем функция operator<<().

Так что напишите так:

cout << F(a, b);
cout << a << b;
→ Ссылка