Middle+
30
0
questionbank

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

Answer from sobes.tech neural network

Произойдет вызов 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

Register or sign in to get access to full answers for all questions from the question bank.

noexceptexception-handlingundefined-behaviorterminate