Fonctions Consteval et dépendance des paramètres de modèle aux arguments de fonction
En C 17, utilisation d'une fonction qui renvoie une constante directement dans une déclaration de paramètre de modèle est interdit en raison de contraintes d'exécution d'exécution. Avec l'introduction des fonctions consteval dans C 20, ces contraintes devraient être supprimées. Cependant, cela permettra-t-il au code suivant de se compiler avec succès ?
<code class="cpp">consteval int foo(int i) { return std::integral_constant<int, i>::value; }</code>
Non.
Malgré l'exigence d'évaluation de la fonction consteval au moment de la compilation, la définition de la fonction elle-même uniquement subit une saisie une fois. En tant que tels, les paramètres de fonction ne seront jamais traités comme des expressions constantes de base en raison du potentiel de divergences de frappe.
Cette limitation est encore soulignée dans la proposition C 20, qui exclut explicitement les paramètres d'être considérés comme des expressions constantes dans son exemple. :
<code class="cpp">consteval int sqrsqr(int n) { return sqr(sqr(n)); // Not a constant-expression at this point, } // but that's okay.</code>
Par conséquent, les fonctions consteval ne permettent pas aux paramètres de modèle de dépendre des arguments de fonction car les paramètres n'ont pas les garanties de typage nécessaires en tant qu'expressions constantes.
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!