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 noexcept
programu 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ż
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla