Что выведет код Junior Исключения спрашивают часто обновлено
Что выведет: раскрутка стека
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <iostream>
#include <stdexcept>
struct G {
const char* n;
~G() { std::cout << '~' << n << '\n'; }
};
void f() {
G a{"a"};
throw std::runtime_error("boom");
}
int main() {
try {
G outer{"outer"};
f();
G never{"never"};
} catch (const std::exception& e) {
std::cout << "caught " << e.what() << '\n';
}
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: ~a, ~outer, caught boom. При броске раскручивается стек: сначала уничтожается a в f, затем outer в try-блоке.
Что выведет
~a
~outer
caught boom
Разбор
При броске раскручивается стек: сначала уничтожается a в f, затем outer в try-блоке. Объект never не создавался, его деструктор не вызывается. Только после этого управление попадает в catch.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.