noexcept
(C++)
C++11 : spécifie si une fonction peut lever des exceptions.
Syntaxe
noexcept-specifier
:
noexcept
noexcept-expression
throw
(
)
noexcept-expression
:
noexcept
(
constant-expression
)
Paramètres
constant-expression
Expression constante de type bool
qui indique si l’ensemble de types d’exceptions potentiels est vide. La version inconditionnelle est équivalente à noexcept(true)
.
Notes
Il noexcept-expression
s’agit d’un type de spécification d’exception : suffixe à une déclaration de fonction qui représente un ensemble de types pouvant être mis en correspondance par un gestionnaire d’exceptions pour toute exception qui quitte une fonction. Lorsque l’opérateur noexcept(constant_expression)
conditionnel unaire génère constant_expression
true
et son synonyme noexcept
inconditionnel, spécifiez que l’ensemble de types d’exceptions potentiels pouvant quitter une fonction est vide. Autrement dit, la fonction ne lève jamais d’exception et n’autorise jamais la propagation d’une exception en dehors de son étendue. L’opérateur noexcept(constant_expression)
qui constant_expression
génère false
, ou l’absence d’une spécification d’exception (autre que pour une fonction de destructeur ou de désallocation), indique que l’ensemble d’exceptions potentielles qui peuvent quitter la fonction est l’ensemble de tous les types.
Marquez une fonction comme noexcept
uniquement si toutes les fonctions qu’il appelle, directement ou indirectement, sont également noexcept
ou const
. Le compilateur n’case activée pas nécessairement chaque chemin d’accès de code pour les exceptions susceptibles de buller vers une noexcept
fonction. Si une exception quitte l’étendue externe d’une fonction marquée noexcept
, std::terminate
est appelée immédiatement et qu’il n’existe aucune garantie que les destructeurs d’objets dans l’étendue seront appelés. Utilisez noexcept
plutôt que le spécificateur throw()
d’exception dynamique . La spécification d’exception dynamique, ou throw(optional_type_list)
spécification, a été déconseillée en C++11 et supprimée en C++17, à l’exception de , qui throw()
est un alias pour noexcept(true)
. Nous vous recommandons d’appliquer noexcept
à n’importe quelle fonction qui n’autorise jamais une exception à propager la pile des appels. Lorsqu’une fonction est déclarée noexcept
, elle permet au compilateur de générer du code plus efficace dans plusieurs contextes différents. Pour plus d’informations, consultez spécifications d’exception.
Exemple
Un modèle de fonction qui copie son argument peut être déclaré noexcept
à la condition que l’objet copié soit un type de données ancien brut (POD). Cette fonction peut être déclarée comme suit :
#include <type_traits>
template <typename T>
T copy_object(const T& obj) noexcept(std::is_pod<T>)
{
// ...
}
Voir aussi
Meilleures pratiques C++ modernes pour la gestion des exceptions et des erreurs
Spécifications d’exception (throw
, noexcept
)
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour