nothrow (C++)

Specyficzne dla firmy Microsoft

Atrybut __declspec rozszerzony, który może być używany w deklaracji funkcji.

Składnia

return-type__declspec(nothrow) [call-convention] nazwa-funkcji ([lista-argumentów])

Uwagi

Zalecamy, aby cały nowy kod używał noexcept operatora zamiast __declspec(nothrow).

Ten atrybut informuje kompilator, że zadeklarowana funkcja i funkcje, które wywołuje, nigdy nie zgłaszają wyjątku. Jednak nie wymusza ona dyrektywy. Innymi słowy, nigdy nie powoduje std::terminate wywołania metody , w przeciwieństwie do noexceptprogramu lub w std:c++17 trybie (Program Visual Studio 2017 w wersji 15.5 lub nowszej), throw().

Dzięki modelowi obsługi wyjątków synchronicznych, teraz domyślnym, kompilator może wyeliminować mechanikę śledzenia okresu istnienia niektórych niewiążalnych obiektów w takiej funkcji i znacznie zmniejszyć rozmiar kodu. Biorąc pod uwagę następującą dyrektywę preprocesora, trzy poniższe deklaracje funkcji są równoważne w /std:c++14 trybie:

#define WINAPI __declspec(nothrow) __stdcall

void WINAPI f1();
void __declspec(nothrow) __stdcall f2();
void __stdcall f3() throw();

W /std:c++17 trybie throw() nie jest odpowiednikiem innych, które używają __declspec(nothrow) , ponieważ powoduje std::terminate wywołanie, jeśli wyjątek jest zgłaszany z funkcji.

Deklaracja void __stdcall f3() throw(); używa składni zdefiniowanej przez standard C++. W języku C++17 throw() słowo kluczowe było przestarzałe.

END Microsoft Specific

Zobacz też

__declspec
noexcept
Słowa kluczowe