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))
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 :
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 :
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!