Когда функция выбрасывает исключение, которое не соответствует её спецификации исключений, программа вызывает функцию unexpected().
По умолчанию unexpected() в конечном счёте вызовет abort(), который немедленно завершает программу.
void myFunction() throw(std::runtime_error) {
throw std::logic_error("This violates the spec");
// unexpected() is called, leading to abort()
}
throw())noexcept, который эффективнееunexpected() можно настроить через set_unexpected()В C++11 и позже используй спецификации noexcept:
void myFunction() noexcept {
// If an exception is thrown, std::terminate() is called
}
Подход с noexcept предпочтительнее, потому что он даёт больше возможностей для оптимизации и яснее показывает намерение компилятору.
Когда функция с динамической спецификацией исключений выбрасывает исключение, которое нарушает её спецификацию, по умолчанию вызывается функция unexpected().
Новый — ещё не проверен сообществом
Вы