Maison  >  Article  >  développement back-end  >  Pourquoi ne puis-je pas utiliser un paramètre de fonction dans une fonction « constexpr » comme expression constante ?

Pourquoi ne puis-je pas utiliser un paramètre de fonction dans une fonction « constexpr » comme expression constante ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-22 00:28:14471parcourir

Why Can't I Use a Function Parameter in a `constexpr` Function as a Constant Expression?

Impossible d'utiliser le paramètre de fonction d'une fonction constexpr dans une expression constante

L'extrait de code fourni montre une fonction constexpr make_const et une fonction t1 qui tente d'utiliser make_const avec une expression non constante. Cela génère une erreur car i dans t1 n'est pas une expression constante.

Une fonction constexpr, lorsqu'elle reçoit des arguments constants, peut être évaluée au moment de la compilation. Cependant, si un paramètre non-constexpr est transmis à une fonction constexpr, cela ne fait pas de ce paramètre une expression constante.

Dans le code ci-dessous, t1 est une fonction constexpr, mais make_const(i) à l'intérieur de t1 est pas une expression constante car i n'est pas une constante :

constexpr int t1(const int i)
{
    return make_const(i);
}

Le code mis à jour montre que t1 peut être déclaré comme constexpr et renvoyer le résultat de make_const :

constexpr int t1(const int i)
{
    return make_const(i);
}

Cependant, le code ci-dessous entraînera toujours une erreur car do_something() n'est pas une expression constante :

template<int i>
constexpr bool do_something(){
    return i;
}

constexpr int t1(const int i)
{
    return do_something<make_const(i)>();
}

Pour résumer , un paramètre de fonction constexpr doit être une expression constante. Si un paramètre non constant est passé, il ne devient pas une expression constante dans la fonction constexpr.

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