Maison > développement back-end > C++ > C 11 peut-il déterminer si une expression est une constante de compilation ?

C 11 peut-il déterminer si une expression est une constante de compilation ?

Patricia Arquette
Libérer: 2024-12-05 06:04:11
original
995 Les gens l'ont consulté

Can C  11 Determine if an Expression is a Compile-Time Constant?

Constexpr est-il possible en C 11 ?

Question :

C 11 peut-il déterminer si une expression est une expression constante au moment de la compilation (constexpr) ?

Réponse :

Oui, il est possible de produire une valeur booléenne à la compilation basée sur cette détermination 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

Cette macro vérifie si l'expression e est une expression constante prvalue en utilisant l'opérateur nosauf. Si noexcept(makeprval(e)) est évalué à true, l'expression e est une expression constante prvalue.

Explication :

Les expressions constantes prvalue ont certaines restrictions :

  • Les appels de fonction doivent avoir des spécifications d'exception sans lancement.
  • Les expressions de lancement sont interdit.
  • Les conversions dynamiques et les expressions typeid doivent être sous une forme non-jetable.

La fonction makeprval n'est pas déclarée comme nosauf, donc si e est une expression constante prvalue, la appeler makeprval(e) sera une expression constante. Ainsi, l'opérateur nosauf retournera vrai.

Limitations :

La macro isprvalconstexpr a certaines limitations :

  • Elle peut produire des faux négatifs dans les cas où l'expression est une expression constante mais où les sous-expressions sont potentiellement évaluées mais pas réellement évaluées.
  • C'est seulement vérifie les expressions constantes prvalue, pas les expressions constexpr générales.

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