Выбор ответа Junior Типы и неопределённое поведение спрашивают часто обновлено
Чтение неинициализированной переменной
Вопрос
Что произойдёт при выполнении int x; std::cout << x; внутри функции?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Неопределённое поведение. Чтение неопределённого значения локальной переменной (без инициализации) это UB.
Варианты ответа
- Выведется 0
- Выведется случайное, но вполне определённое число из стека
- Ошибка компиляции
- Неопределённое поведениеправильный ответ
Разбор
Чтение неопределённого значения локальной переменной (без инициализации) это UB. Компилятор может, например, выкинуть ветку или подставить разные значения в разных местах. GCC выдаст предупреждение -Wuninitialized, но не ошибку.
- Нулём инициализируются только статические и глобальные переменные.
- «Мусор со стека» это лишь одно из возможных проявлений UB, а не гарантия.
- Код компилируется. В C++26 для таких чтений вводится понятие erroneous behaviour, но в C++20/23 это UB.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
UB, implementation-defined, unspecified
Следующий вопрос
Что из этого неопределённое поведение
Ещё по теме «Типы и неопределённое поведение»
- Порядок байтов: перевернуть uint32 и посчитать единицы
- Умножение int64 с проверкой переполнения
- Середина двух int64 без переполнения
- std::bit_cast
- Что C++20 изменил для знаковых целых
- Порядок вычисления аргументов функции
- Объясни, что такое неопределённое поведение
- Продвижение unsigned char