0Pricing
C++ Academy · Lektion

Generische Lambdas und Closures in C++14

Schreiben Sie generische Lambdas mit auto-Parametern und setzen Sie sich mit Closure-Typen auseinander.

Generische Lambdas und Closures in C++14 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.

Generische Lambdas

Mit C++14 können Sie auto in der Parameterliste eines Lambdas verwenden. Der Compiler generiert einen als Template ausgeführten operator() – das Lambda akzeptiert jeden Typ.

auto print = [](const auto& x) {
    std::cout << x << "\n";
};

print(42);
print("hello");
print(3.14);

So funktionieren sie

Das Lambda wird zu einer Klasse mit einem als Template ausgeführten operator(). Jede eindeutige Kombination von Typen erzeugt intern eine separate Funktion.

Einsatzfälle

Generische Lambdas spielen ihre Stärken in Algorithmen aus, die mit mehreren Typen arbeiten.

std::vector<int> ints = {1, 2, 3};
std::vector<std::string> strs = {"a", "b"};

auto printAll = [](const auto& container) {
    for (const auto& x : container) std::cout << x << " ";
};
printAll(ints);
printAll(strs);

Mehrere auto-Parameter

Jedes auto ist unabhängig – verschiedene Parameter können zu verschiedenen Typen aufgelöst werden.

auto add = [](auto a, auto b) {
    return a + b;
};
std::cout << add(1, 2.5);            // 3.5
std::cout << add(std::string("Hi"), "!");  // Hi!

Closures sind Objekte

Jeder Lambda-Ausdruck erzeugt eine Closure – eine Instanz einer eindeutigen, vom Compiler generierten Klasse. Die Closure speichert alle erfassten Variablen als Member.

Ein eindeutiger Typ pro Lambda

Jeder Lambda-Ausdruck besitzt einen eindeutigen Typ, selbst wenn zwei Ausdrücke textlich identisch sind. Der Typname kann nicht direkt geschrieben werden – verwenden Sie auto oder std::function.

Lambdas in std::function speichern

Um ein Lambda in einer Variable mit festgelegtem Typ zu speichern, verpacken Sie es in std::function. Das verursacht einen geringfügigen Mehraufwand, ermöglicht aber Laufzeitpolymorphie über aufrufbare Objekte.

#include <functional>
std::function<int(int)> doubler = [](int x) { return x * 2; };

Kosten der Typlöschung

std::function verwendet Type Erasure – es kann jedes kompatible aufrufbare Objekt speichern, verursacht aber eine Heap-Allokation und einen virtuellen Aufruf. Vermeiden Sie es in zeitkritischen Schleifen.

Wann auto ausreicht

Für kurzlebige Lambdas (die an Algorithmen übergeben oder in auto gespeichert werden) ist keine Typlöschung erforderlich, und es entsteht kein Mehraufwand.

Lambdas zurückgeben

Verwenden Sie auto als Rückgabetyp, um ein Lambda zurückzugeben. Jeder Aufruf erzeugt eine neue Closure.

auto makeAdder(int n) {
    return [n](int x) { return x + n; };
}

auto add5 = makeAdder(5);
std::cout << add5(10);   // 15

Funktionen höherer Ordnung

Lambdas machen C++ zu einer angenehmen Umgebung für Funktionen höherer Ordnung – Funktionen, die andere Funktionen als Argumente übernehmen oder zurückgeben.

Schnelltest

Was bedeutet auto in der Parameterliste eines C++14-Lambdas?

Zusammenfassung

Generische C++14-Lambdas verwenden auto-Parameter für Polymorphie zur Compile-Zeit. Jedes Lambda besitzt einen eindeutigen Closure-Typ – verwenden Sie auto, um es zu speichern, oder std::function, wenn Typlöschung erforderlich ist.

Häufig gestellte Fragen

Ist die Lektion „Generische Lambdas und Closures in C++14“ kostenlos?

Ja — der vollständige Text von „Generische Lambdas und Closures in C++14“ 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 „Generische Lambdas und Closures in C++14“?

Schreiben Sie generische Lambdas mit auto-Parametern und setzen Sie sich mit Closure-Typen auseinander. 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 „Generische Lambdas und Closures in C++14“?

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

  1. Funktionsobjekte und Funktoren
  2. Lambda-Captures: per Wert, per Referenz, mutable
  3. Generische Lambdas und Closures in C++14
  4. std::function: typgelöschte aufrufbare Objekte
← Zurück zu C++ Academy