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 noexcept
ou 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de l’année 2024, nous abandonnerons progressivement le mécanisme de retour d’information GitHub Issues pour le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultez :Soumettre et afficher des commentaires pour