Ja, C++-Lambda-Ausdrücke können die Rekursion mithilfe von std::function unterstützen: Verwenden Sie std::function, um einen Verweis auf einen Lambda-Ausdruck zu erfassen. Mit einer erfassten Referenz kann sich ein Lambda-Ausdruck rekursiv selbst aufrufen.
Rekursion von Lambda-Ausdrücken in C++
Lambda-Ausdrücke sind eine leistungsstarke Funktion in C++, mit der Sie anonyme Funktionsobjekte zur Laufzeit definieren können. Im Allgemeinen können Lambda-Ausdrücke nicht rekursiv sein, da sie ihre eigenen Referenzen nicht erfassen können. Es gibt jedoch eine Technik zur Unterstützung der Rekursion von Lambda-Ausdrücken mithilfe von std::function.
Verwenden von std::function
std::function ist ein Funktionsobjekt, das einen Verweis auf jedes aufrufbare Objekt, einschließlich Lambda-Ausdrücke, enthalten kann. Durch die Verwendung von std::function zum Erfassen eines Verweises auf einen Lambda-Ausdruck können Sie einen Lambda-Ausdruck erstellen, der rekursiv aufgerufen werden kann.
Codebeispiel
Das folgende Codebeispiel zeigt, wie man std::function verwendet, um die Rekursion eines Lambda-Ausdrucks zu ermöglichen:
#include <functional> int fibonacci(int n) { std::function<int(int)> fib = [&fib](int n) { if (n <= 1) { return n; } return fib(n - 1) + fib(n - 2); }; return fib(n); } int main() { int result = fibonacci(5); std::cout << "Fibonacci of 5 is: " << result << "\n"; return 0; }
In diesem Beispiel ein Verweis auf den Lambda-Ausdruck fib
捕获了对自身 fib
. Auf diese Weise kann es sich selbst rekursiv aufrufen, um Fibonacci-Zahlen zu berechnen.
Hinweis
Obwohl Sie std::function verwenden können, um die Rekursion von Lambda-Ausdrücken zu unterstützen, müssen Sie bei der Verwendung der Rekursion dennoch auf die folgenden Dinge achten:
Das obige ist der detaillierte Inhalt vonUnterstützen C++-Lambda-Ausdrücke die Rekursion?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!