Какой вывод получит программа с пост- и префиксным инкрементом

В консоль будет выведено 3. После последнего постфиксного инкремента значение counter станет 4, но в поток передаётся его прежнее значение.

Короткий ответ

Что ответить на собеседовании

В консоль будет выведено 3. После последнего постфиксного инкремента значение counter станет 4, но в поток передаётся его прежнее значение.

Подробный разбор

Ответ с пояснениями

Условие

Определите, какое значение будет выведено в консоль после выполнения следующего кода.

int counter = 0;

if (counter) ++counter; counter++;

if (counter) ++counter; counter++;

cout << counter++ << endl;

Ответ

В консоль будет выведено 3. После последнего постфиксного инкремента значение counter станет 4, но в поток передаётся его прежнее значение.

Без фигурных скобок if управляет только следующей инструкцией. Поэтому код эквивалентен:

if (counter) { ++counter; }
counter++;
if (counter) { ++counter; }
counter++;
cout << counter++ << endl;

Первый if пропускается: 0 превращается в 1 отдельным counter++. Второй if увеличивает 1 до 2, следующая инструкция — до 3. Выводит 3 и только затем логически оставляет counter равным 4. Отступы на семантику C++ не влияют.

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

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

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

Подробнее