Middle+
25
0
questionbank

Что произойдет, если в функции, помеченной как noexcept, будет выброшено исключение?

Ответ от нейросети sobes.tech

Произойдет вызов std::terminate. При этом стандарт гарантирует, что перед вызовом std::terminate будет вызван std::unexpected в C++17 и более ранних версиях, но в C++20 это поведение удалено. Таким образом, в современных стандартах (C++20 и выше) при выбросе исключения из функции, помеченной noexcept, происходит немедленный вызов std::terminate.

По умолчанию std::terminate вызывает abort. Поведение std::terminate может быть изменено вызовом std::set_terminate.

Пример:

cpp

Произойдет вызов std::terminate. При этом стандарт гарантирует, что перед вызовом std::terminate будет вызван std::unexpected в C++17 и более ранних версиях, но в C++20 это поведение удалено. Таким образом, в современных стандартах (C++20 и выше) при выбросе исключения из функции, помеченной noexcept, происходит немедленный вызов std::terminate.

По умолчанию std::terminate вызывает abort. Поведение std::terminate может быть изменено вызовом std::set_terminate.

Пример:

cpp

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

noexceptexception-handlingundefined-behaviorterminate