Maison > développement back-end > C++ > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-24 01:35:01
original
389 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php
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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!