Определите вывод программы с функцией, использующей ссылку и постинкремент

Будет выведено 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 по значению изменение осталось бы внутри функции и результат был бы другим.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее