nothrow
(C++)
Блок, относящийся только к системам Майкрософт
Расширенный __declspec
атрибут, который можно использовать в объявлении функций.
Синтаксис
return-type
__declspec(nothrow)
[call-convention] function-name ([argument-list])
Замечания
Рекомендуется, чтобы весь новый код использовал noexcept
оператор, а не __declspec(nothrow)
.
Этот атрибут сообщает компилятору, что и объявленная функция, и функции, которые она вызывает, никогда не создают исключений. Однако директива не применяется. Другими словами, он никогда не вызывает std::terminate
вызов, в отличие noexcept
от режима или в std:c++17
режиме (Visual Studio 2017 версии 15.5 и более поздних версий), throw()
.
Поскольку по умолчанию теперь используется модель синхронной обработки исключений, то компилятор может исключить механизм, позволяющий отслеживать время существования удаляемых объектов в такой функции, и значительно уменьшить объем кода. Учитывая следующую директиву препроцессора, три объявления функций ниже эквивалентны в /std:c++14
режиме:
#define WINAPI __declspec(nothrow) __stdcall
void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();
В /std:c++17
режиме не эквивалентен другим, которые используются__declspec(nothrow)
, throw()
так как вызываетсяstd::terminate
, если исключение создается из функции.
Объявление void __stdcall f3() throw();
использует синтаксис, определенный стандартом C++. В C++17 throw()
ключевое слово не рекомендуется.
Завершение блока, относящегося только к системам Майкрософт
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по