Maison  >  Article  >  développement back-end  >  Les fonctions Consteval peuvent-elles autoriser des paramètres de modèle dépendants des arguments de fonction ?

Les fonctions Consteval peuvent-elles autoriser des paramètres de modèle dépendants des arguments de fonction ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-24 01:35:01390parcourir

Can Consteval Functions Allow Template Parameters Reliant on Function Arguments?

Les fonctions Consteval peuvent-elles activer des paramètres de modèle en fonction des arguments de fonction ?

En C 17, les fonctions constexpr comme l'extrait ci-dessous ne sont pas valides :

<code class="cpp">constexpr int foo(int i) {
    return std::integral_constant<int, i>::value;
}</code>

Malgré l'évaluation de foo au moment de la compilation, le compilateur exige qu'il soit exécutable au moment de l'exécution, ce qui empêche l'instanciation du modèle.

C 20 introduit des fonctions consteval, qui appliquent l'évaluation au moment de la compilation. On peut se demander si cela permet un code comme celui-ci :

<code class="cpp">consteval int foo(int i) {
    return std::integral_constant<int, i>::value;
}</code>

La réponse est non.

Les modifications potentielles du document ne peuvent pas modifier le typage singulier du non-modèle définitions de fonctions. De plus, si ce code était valide, il ouvrirait la possibilité de déclarer des variables de type std::integral_constant, ce qui semble très restrictif au regard de la One Definition Rule (ODR).

L'article illustre également que les paramètres ne seront pas traités comme des expressions constantes de base à travers un 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>

Essentiellement, les paramètres de fonction n'auront toujours pas de statut d'expression constante en raison d'incohérences de frappe potentielles.

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!

Déclaration:
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