Maison > développement back-end > C++ > Comment pouvons-nous déterminer si une expression C 11 est un « constexpr » au moment de la compilation ?

Comment pouvons-nous déterminer si une expression C 11 est un « constexpr » au moment de la compilation ?

Linda Hamilton
Libérer: 2024-12-03 17:42:13
original
910 Les gens l'ont consulté

How Can We Determine if a C  11 Expression is a `constexpr` at Compile Time?

Détermination des expressions Constexpr en C 11

Question : Est-il possible de déterminer si une expression C 11 est une expression constante (constexpr) à au moment de la compilation ?

Réponse :Oui, c'est possible en utilisant la technique suivante :

template<typename T>
constexpr typename remove_reference<T>::type makeprval(T&& t) {
  return t;
}

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

Explication :

La macro isprvalconstexpr prend une expression e et renvoie vrai si e est une expression constante prvalue (c'est-à-dire qu'elle peut être évaluée à moment de la compilation). Ceci est déterminé à l'aide de l'opérateur nosauf, qui renvoie false si e contient des appels de fonction potentiellement évalués qui n'ont pas de spécification d'exception de non-lancement, d'expressions de lancement ou de conversions dynamiques ou d'identifiants de type pouvant être lancés.

Limites :

Il est important de noter que cette technique présente une limite. L'opérateur nosauf peut parfois donner des faux négatifs, ce qui signifie qu'il peut signaler qu'une expression n'est pas une expression constante même si elle l'est. Cela se produit lorsque les expressions « potentiellement évaluées » au sein de e ne sont pas réellement évaluées, ce qui peut se produire dans certaines circonstances même si elles sont formellement considérées comme potentiellement évaluées.

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