Ссылка на передаваемый аргумент
#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;