Программы C ++, использующие исключения, должны иметь блок try / catch в своей основной функции? - PullRequest
0 голосов
/ 17 января 2019

Если исключение выдается кодом C ++, но не перехвачено, это вызывает SIGABRT. Некоторые системы просто печатают «Прервать», другие системы также печатают содержимое e.what ().

Вопрос в том, говорит ли стандарт C ++, что блок try / catch необходим в главной функции, чтобы программа считалась программой с хорошим поведением, или C ++ просто молча полагается на систему, чтобы обработать это?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Как описано в C ++ 17, стандартный черновик , в разделе 18.3.9 [кроме. Дескриптор]:

Если соответствующий обработчик не найден, функция std::terminate() называется;независимо от того, разматывается ли стек до того, как этот вызов std::terminate() определяется реализацией.

Итак, поведение такой программы не считается неопределенным, поскольку стандарт определяет, что std::terminate будетназывается.

0 голосов
/ 17 января 2019

Нет, стандарт C ++ не требует отлова всех исключений. Если исключение не перехвачено, программа завершается и определяется реализацией, если происходит раскрутка стека (это происходит со всеми известными мне компиляторами). Дальнейшее чтение: https://en.cppreference.com/w/cpp/language/throw

...