Maison > développement back-end > C++ > Mon expression C 11 est-elle un « constexpr » ?

Mon expression C 11 est-elle un « constexpr » ?

Linda Hamilton
Libérer: 2024-12-02 20:32:15
original
172 Les gens l'ont consulté

Is My C  11 Expression a `constexpr`?

Détection d'expressions constantes en C 11

En C 11, il est possible de déterminer si une expression est une expression constante (constexpr) pendant compilation, ce qui peut être bénéfique pour optimiser le code et garantir certaines propriétés.

Utilisation nosauf(makeprval(e))

Une façon de déterminer si une expression est une expression constante consiste à utiliser la macro suivante :

#define isprvalconstexpr(e) noexcept(makeprval(e))
Copier après la connexion

où makeprval est une fonction de modèle qui prend une référence à une expression en entrée et renvoie une valeur de la même type.

Explication

L'expression nosauf(e) renvoie false si e contient certaines opérations qui ne sont pas autorisées dans les expressions constantes, telles que les appels de fonction non lancés, expressions de lancement et conversions dynamiques ou typeids jetables. Si l'appel à makeprval n'est pas une expression constante, l'expression nosauf retournera également false.

Limitations

Bien que isprvalconstexpr soit généralement efficace pour détecter les expressions constantes prvalue, il a une limitation subtile. Cela peut donner des faux négatifs dans les cas où une expression est une expression constante mais contient des sous-expressions potentiellement évaluées qui ne sont pas autorisées dans les expressions constantes.

Exemple d'utilisation

L'exemple suivant démontre l'utilisation de isprvalconstexpr :

constexpr int a = (0 ? throw "fooled!" : 42);
constexpr bool atest = isprvalconstexpr((0 ? throw "fooled!" : 42));
Copier après la connexion

Dans cet exemple, atest est faux car l'expression (0 ? throw "dupé!" : 42) n'est pas une expression constante, même si l'initialisation de a réussit. C'est parce que la sous-expression non constante « maléfique » lance « dupé ! est potentiellement évalué, même s'il ne l'est jamais réellement dans ce cas précis.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal