Heim > Backend-Entwicklung > C++ > Warum kann meine rekursive Lambda-Funktion nicht kompiliert werden und wie kann ich das Problem beheben?

Warum kann meine rekursive Lambda-Funktion nicht kompiliert werden und wie kann ich das Problem beheben?

Patricia Arquette
Freigeben: 2024-12-13 13:46:11
Original
928 Leute haben es durchsucht

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

Kompilierungsprobleme mit rekursiven Lambda-Funktionen lösen

Beim Versuch, eine rekursive Lambda-Funktion zu definieren, schlägt die Kompilierung des folgenden Codes fehl:

auto sum = [term,next,&sum](int a, int b)mutable ->int {
  if(a>b)
    return 0;
  else
    return term(a) + sum(next(a),b);
};
Nach dem Login kopieren

Der Fehler rührt von der Unfähigkeit her, „auto“ beim Initialisieren einer Lambda-Funktion zu verwenden das fängt sich ein. Die automatische Typinferenz kann den Rückgabetyp des Lambda nicht bestimmen, da er von seinen erfassten Variablen abhängt.

Um dieses Problem zu beheben, können die folgenden Schritte unternommen werden:

  1. Verwenden Sie einen vollständig spezifizierten Funktionsobjekttyp:

    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);
    };
    Nach dem Login kopieren

    Durch die Angabe des Funktionsobjekttyps entfällt die Notwendigkeit Automatische Typinferenz, die es dem Compiler ermöglicht, den Rückgabetyp genau zu bestimmen.

  2. Funktionsobjekt später initialisieren:

    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);
    };
    Nach dem Login kopieren

    Funktion initialisieren Ein Objekt ohne Anfangswert ermöglicht es dem Compiler, seinen Typ in der Zuweisungsanweisung abzuleiten.

Das obige ist der detaillierte Inhalt vonWarum kann meine rekursive Lambda-Funktion nicht kompiliert werden und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage