nothrow (C++)

Section spécifique à Microsoft

Attribut __declspec étendu qui peut être utilisé dans la déclaration des fonctions.

Syntaxe

return-type__declspec(nothrow) [call-convention] function-name ([argument-list])

Notes

Nous recommandons que tout nouveau code utilise l’opérateur noexcept plutôt que __declspec(nothrow).

Cet attribut indique au compilateur que la fonction déclarée et les fonctions qu'elle appelle ne lèvent jamais d'exception. Toutefois, elle n’applique pas la directive. En d’autres termes, il ne se fait std::terminate jamais appeler, contrairement noexceptou en std:c++17 mode (Visual Studio 2017 version 15.5 et ultérieure), throw().

Avec le modèle synchrone de gestion des exceptions, utilisé désormais par défaut, le compilateur peut éliminer les mécanismes de suivi de la durée de vie de certains objets non déroulables dans une telle fonction, et peut réduire considérablement la taille du code. Étant donné la directive de préprocesseur suivante, les trois déclarations de fonction ci-dessous sont équivalentes en /std:c++14 mode :

#define WINAPI __declspec(nothrow) __stdcall

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

En /std:c++17 mode, throw() n’est pas équivalent aux autres qui utilisent __declspec(nothrow) , car il provoque std::terminate l’appel si une exception est levée à partir de la fonction.

La void __stdcall f3() throw(); déclaration utilise la syntaxe définie par la norme C++. En C++17, la throw() mot clé a été déconseillée.

FIN de la section spécifique à Microsoft

Voir aussi

__declspec
noexcept
Mots clés