Будет выведено 12 без разделителя. Постинкремент сначала даёт старое значение 1 для cout, затем увеличивает исходный a; ссылка b после этого видит 2.
Определите вывод программы с функцией, использующей ссылку и постинкремент
Будет выведено 12 без разделителя. Постинкремент сначала даёт старое значение 1 для cout, затем увеличивает исходный a; ссылка b после этого видит 2.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Установите, какой текст будет выведен в консоль после выполнения следующего фрагмента кода.
#include <iostream>
using namespace std;
void f(int& x) {
cout << x++;
}
int main() {
int a = 1;
int& b = a;
f(a);
cout << b;
return 0;
}
Ответ
Будет выведено 12 без разделителя. Постинкремент сначала даёт старое значение 1 для cout, затем увеличивает исходный a; ссылка b после этого видит 2.
Параметр x передаётся по ссылке и обозначает тот же объект, что a. Объявление int& b = a также не создаёт отдельного числа.
После завершения вызова f(a) увеличение уже выполнено, поэтому следующий вывод b показывает новое значение. При передаче x по значению изменение осталось бы внутри функции и результат был бы другим.