В консоль будет выведено 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++ не влияют.