Maison > Article > développement back-end > Pourquoi ne puis-je pas utiliser un paramètre de fonction d'une fonction « constexpr » dans une expression constante ?
Le code fourni démontre une tentative de utilise la valeur de retour d'une fonction constexpr make_const dans une expression constante, mais elle rencontre un erreur.
static constexpr int make_const(const int i) { return i; } void t1(const int i) { constexpr int ii = make_const(i); // Error occurs here (i is not a constant expression) std::cout << ii; } int main() { t1(12); // Call the function }
Une fonction constexpr, contrairement à la croyance populaire, ne fait pas comme par magie évaluer ses paramètres au moment de la compilation. Au lieu de cela, il permet la propagation de la constexprness depuis ses arguments d'entrée vers sa sortie. Cependant, dans le code donné, le paramètre de fonction i n'est pas un constexpr, donc la fonction constexpr make_const ne peut pas le convertir en un seul.
L'erreur survient parce que l'affectation ultérieure constexpr int ii = make_const(i) tente de déclarer une variable constexpr (ii) initialisée avec le résultat d'une expression non constexpr (make_const(i)). Ceci n'est pas autorisé, car les variables constexpr doivent toujours être initialisées avec des expressions constexpr.
Une fonction constexpr présente deux caractéristiques clés :
Pour résoudre l'erreur, on peut s'assurer que le paramètre de la fonction lui-même est constexpr. Ceci peut être réalisé en modifiant la déclaration de fonction en :
constexpr int make_const(constexpr int i) { return i; }
Cette modification garantit que la fonction peut convertir efficacement ses entrées constexpr en sorties constexpr, permettant l'utilisation prévue de la fonction dans une expression constante.
Dans les exemples de codes alternatifs fournis, la fonction make_const peut être invoquée comme une expression constexpr dans t1 puisque ses paramètres sont désormais constexpr. Cependant, tenter de transmettre le résultat d'une expression non constexpr (telle qu'une variable d'exécution) dans la fonction entraînera toujours une erreur, car la fonction nécessite des arguments constexpr pour son exécution 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!