Maison >développement back-end >C++ >Les fonctions Consteval peuvent-elles activer la dépendance des paramètres de modèle sur les arguments de fonction en C 20 ?

Les fonctions Consteval peuvent-elles activer la dépendance des paramètres de modèle sur les arguments de fonction en C 20 ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-23 16:43:02604parcourir

Can Consteval Functions Enable Template Parameter Dependence on Function Arguments in C  20?

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!

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