Beim Versuch, ein rekursives Lambda zu erstellen, ist bei der Verwendung von Auto ein Fehler aufgetreten Schlüsselwort, um den Typ des Lambda abzuleiten. Wenn Sie jedoch den Typ des Lambda explizit als std::function deklariert haben, wurde der Code erfolgreich kompiliert.
Automatische Typinferenz:
Bei Verwendung von „auto“ leitet der Compiler den Typ des Lambda basierend auf seiner Initialisierung ab. Bei einem rekursiven Lambda muss der Lambda-Abschluss jedoch die Typen kennen, die er erfasst (in diesem Fall sum). Dadurch entsteht eine zirkuläre Abhängigkeit, da der Typ des Lambda vom Typ seines Abschlusses abhängt, der wiederum vom Typ des Lambda abhängt.
Explizite Typdeklaration:
Den Typ des Lambda als std::function
Rekursive Funktion:
Das überarbeitete Codesegment:
std::function<int(int, int)> sum; sum = [term, next, &sum](int a, int b) -> int { if (a > b) return 0; else return term(a) + sum(next(a), b); };
zeigt, dass rekursive Lambda-Funktionen in C 0x vollkommen realisierbar sind. Sie erfordern lediglich eine explizite Typdeklaration, um das Problem der Typinferenz zu lösen.
Das obige ist der detaillierte Inhalt vonWarum erfordert eine rekursive Lambda-Funktion in C 0x eine explizite Typdeklaration?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!