Назад к вопросам
JuniorТеорияЧасто
Что произойдёт при запуске этой программы?
#include <iostream>
#include <stdexcept>
void check_age(int age) noexcept {
if (age < 0) {
throw std::invalid_argument("negative age");
}
}
int main() {
try { check_age(-1); }
catch (const std::exception&) { std::cout << "caught"; }
}Программа вызовет std::terminate: check_age объявлена noexcept
- Ждать
caught: исключение, которое покинуло быnoexcept-функцию, вместо этого вызываетstd::terminate, и внешний обработчик его не увидит. - Ждать ошибку компиляции: компилятор не проверяет обещание
noexcept; GCC и Clang только предупреждают, и программа собирается.
- Что выведет программа, если
check_ageсама поймает своё исключение в блокеtry? - Почему функцию, которая может завершиться ошибкой, обычно не помечают
noexcept?