nothrow (C++)

Microsoft-spezifisch

Ein erweitertes __declspec Attribut, das in der Deklaration von Funktionen verwendet werden kann.

Syntax

Rückgabetyp__declspec(nothrow) [Call-Convention] Funktionsname ([Argumentliste])

Hinweise

Es wird empfohlen, dass der Operator anstelle von noexcept allen neuen Code verwendet __declspec(nothrow)wird.

Dieses Attribut weist den Compiler an, dass die deklarierte Funktion und die Funktionen, die aufgerufen werden, nie eine Ausnahme auslösen. Sie erzwingt jedoch nicht die Richtlinie. Mit anderen Worten, es wird std::terminate niemals aufgerufen, anders als noexceptoder im std:c++17 Modus (Visual Studio 2017, Version 15.5 und höher), throw().

Mit dem Modell für synchrone Ausnahmebehandlung kann der Compiler nun standardmäßig die Mechanismen der Lebensdauerverfolgung gewisser entladbarer Objekte in einer solchen Funktion eliminieren, wodurch die Codegröße erheblich reduziert wird. Angesichts der folgenden Präprozessordirektive sind die folgenden drei Funktionsdeklarationen im /std:c++14 Modus gleichwertig:

#define WINAPI __declspec(nothrow) __stdcall

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

Im /std:c++17 Modus entspricht nicht den anderen, die verwendet __declspec(nothrow) werden, weil sie std::terminate ausgelöst wird, throw() wenn eine Ausnahme von der Funktion ausgelöst wird.

Die void __stdcall f3() throw(); Deklaration verwendet die vom C++-Standard definierte Syntax. In C++17 wurde die throw() Schlüsselwort (keyword) veraltet.

Ende Microsoft-spezifisch

Siehe auch

__declspec
noexcept
Schlüsselwörter