Partager via


nothrow (C++)

Section spécifique à Microsoft

Un attribut étendu de __declspec qui peut être utilisé dans la déclaration de fonctions.

Syntaxe

type-retour __declspec(nothrow) [convention-appel] nom-fonction ([liste-arguments])

Notes

Nous vous recommandons d’utiliser l’opérateur noexcept au lieu de __declspec(nothrow) dans le nouveau code.

Cet attribut indique au compilateur que la fonction déclarée et les fonctions qu'elle appelle ne lèvent jamais d'exception. Cependant, il n’applique pas la directive. En d’autres termes, il ne provoque jamais l’appel de std::terminate, contrairement à noexcept, ou en mode std:c++17 (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. Compte tenu de la directive de préprocesseur suivante, les trois déclarations de fonction ci-dessous sont équivalentes en mode /std:c++14 :

#define WINAPI __declspec(nothrow) __stdcall

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

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

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

FIN de la section spécifique à Microsoft

Voir aussi

__declspec
noexcept
Mots clés