Lambda-Ausdrücke: Capture, mutable, generisch
Schreiben Sie Lambdas mit Captures, mutable-Semantik und generischen auto-Parametern.
Lambda-Ausdrücke: Capture, mutable, generisch ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist eine Lambda-Funktion
Eine Lambda-Funktion ist ein anonymes Funktionsobjekt, das inline definiert wird. Verwenden Sie sie, wenn Sie sonst eine kleine benannte Funktion oder eine Struktur mit operator() schreiben würden.
auto square = [](int x) { return x * x; };
std::cout << square(5); // 25Anatomie der Syntax
Eine Lambda-Funktion besteht aus vier Teilen:
[capture]— welche Variablen aus dem umgebenden Gültigkeitsbereich verwendet werden(parameters)— wie eine Funktionsparameterliste-> return_type— optional, wird häufig abgeleitet{ body }
Leere Capture-Liste
[] bedeutet „nichts erfassen“. Die Lambda-Funktion greift nur auf globale und statische Variablen zu.
auto add = [](int a, int b) { return a + b; };Capture per Wert
Führen Sie Variablen in der Capture-Klausel auf, um sie in die Lambda-Funktion zu kopieren.
int n = 5;
auto times = [n](int x) { return x * n; };
n = 10;
std::cout << times(3); // 15 (captured n was 5)Capture per Referenz
Stellen Sie & voran, um per Referenz zu erfassen. Änderungen innerhalb der Lambda-Funktion wirken sich auf die äußere Variable aus.
int counter = 0;
auto inc = [&counter]() { ++counter; };
inc(); inc(); inc();
std::cout << counter; // 3Standard-Captures: [=] und [&]
Erfassen Sie mit [=] alles Verwendete per Wert oder mit [&] alles per Referenz. Gehen Sie damit sorgfältig um – seien Sie nach Möglichkeit explizit.
auto f = [=]() { return a + b; }; // copies a, b
auto g = [&]() { return a + b; }; // references a, bMutable-Lambdas
Standardmäßig sind per Wert erfasste Variablen innerhalb der Lambda-Funktion const. Fügen Sie mutable hinzu, um sie ändern zu können – die Änderungen betreffen nur die Kopie in der Lambda-Funktion.
int n = 5;
auto f = [n]() mutable {
n += 1; // OK because of mutable
return n;
};
f(); f(); // returns 6, then 7
std::cout << n; // still 5 in outer scopeAbleitung des Rückgabetyps
Der Compiler leitet den Rückgabetyp aus dem Funktionskörper ab. Geben Sie ihn explizit an, wenn dies erforderlich ist.
auto half = [](int x) -> double { return x / 2.0; };Generische Lambdas (C++14)
Verwenden Sie auto in der Parameterliste, um eine generische Lambda-Funktion zu erhalten, die mit jedem Typ funktioniert.
auto print = [](const auto& x) { std::cout << x << "\n"; };
print(42); // int
print("hello"); // const char*
print(3.14); // doubleLambdas als Funktionsargumente
STL-Algorithmen akzeptieren Lambdas als Prädikate und Transformationen.
std::vector<int> v = {5, 2, 8, 1};
std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; });Lambdas sind Funktionsobjekte
Intern erzeugt der Compiler eine Klasse mit operator(). Sie können Lambdas in std::function oder auto speichern.
Kurzer Test
Können Sie innerhalb einer Lambda-Funktion [n](int x) { return x * n; } n einen Wert zuweisen, ohne die Lambda-Funktion mit mutable zu versehen?
Zusammenfassung
Lambdas sind anonyme Funktionsobjekte, die inline definiert werden. Erfassen Sie per Wert oder Referenz, verwenden Sie mutable, um erfasste Werte zu ändern, und nutzen Sie in C++14+ auto-Parameter für generische Lambdas.
Häufig gestellte Fragen
Ist die Lektion „Lambda-Ausdrücke: Capture, mutable, generisch“ kostenlos?
Ja — der vollständige Text von „Lambda-Ausdrücke: Capture, mutable, generisch“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Lambda-Ausdrücke: Capture, mutable, generisch“?
Schreiben Sie Lambdas mit Captures, mutable-Semantik und generischen auto-Parametern. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Lambda-Ausdrücke: Capture, mutable, generisch“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- auto, decltype und Typherleitung
- Range-basierte for-Schleife, nullptr und enum class
- Lambda-Ausdrücke: Capture, mutable, generisch
- Strukturierte Bindings und if-init in C++17