Maison > développement back-end > C++ > Pourquoi ma fonction Lambda récursive ne parvient-elle pas à se compiler et comment puis-je y remédier ?

Pourquoi ma fonction Lambda récursive ne parvient-elle pas à se compiler et comment puis-je y remédier ?

Patricia Arquette
Libérer: 2024-12-13 13:46:11
original
936 Les gens l'ont consulté

Why Does My Recursive Lambda Function Fail to Compile, and How Can I Fix It?

Résoudre les problèmes de compilation avec les fonctions Lambda récursives

En essayant de définir une fonction lambda récursive, le code suivant ne parvient pas à se compiler :

auto sum = [term,next,&sum](int a, int b)mutable ->int {
  if(a>b)
    return 0;
  else
    return term(a) + sum(next(a),b);
};
Copier après la connexion

L'erreur vient de l'impossibilité d'utiliser "auto" lors de l'initialisation d'une fonction lambda qui se capture. L'inférence de type automatique ne peut pas déterminer le type de retour du lambda, car il dépend de ses variables capturées.

Pour résoudre ce problème, les étapes suivantes peuvent être suivies :

  1. Utiliser un type d'objet de fonction entièrement spécifié :

    std::function<int(int,int)> sum = [term,next,&amp;sum](int a, int b)->int {
      if(a>b)
        return 0;
      else
        return term(a) + sum(next(a),b);
    };
    Copier après la connexion

    La spécification du type d'objet de fonction élimine le besoin de saisie automatique inférence, permettant au compilateur de déterminer le type de retour avec précision.

  2. Initialiser l'objet fonction plus tard :

    std::function<int(int, int)> sum;
    
    sum = [term, next, &amp;sum](int a, int b) -> int {
        if (a > b)
            return 0;
        else
            return term(a) + sum(next(a), b);
    };
    Copier après la connexion

    Initialiser l'objet fonction sans une valeur initiale permet au compilateur de déduire son type dans l'instruction d'affectation.

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.cn
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