Generische Lambdas in C 14 verstehen
Generische Lambdas wurden in C 14 eingeführt und bieten eine Möglichkeit, Lambda-Ausdrücke zu schreiben, die mit Werten beliebiger Werte arbeiten Typ. Es stellt sich jedoch die Frage: Wie funktioniert dieser Mechanismus?
Implementierung generischer Lambdas
Im Gegensatz zu regulären Lambdas in C 11 verwenden generische Lambdas einen auf Vorlagen basierenden Aufrufoperator Verschlussart. Wenn das Schlüsselwort [auto](https://en.cppreference.com/w/cpp/keyword/auto) in der Parameterliste erscheint, generiert der Compiler einen Aufrufoperator mit Vorlage anstelle eines Standardoperators.
Beispiel:
auto glambda = [](auto a) { return a; };
Dieser Code generiert mit dem folgenden Aufruf einen Abschlusstyp Operator:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
Standarddefinition
Gemäß Absatz 5.1.2/5 des C 14 Standard Draft n3690 der Aufrufoperator eines generischen Lambda-Abschlusstyps hat die folgenden Eigenschaften:
Ähnlichkeit mit C-Vorlagen vs. Java-Generika
Generische Lambdas ähneln C-Vorlagen insofern, als der Compiler einzigartige Funktionen mit unterschiedlichen Argumenttypen generiert auf dem Vorlagenparameter. Sie unterscheiden sich jedoch von Java-Generika, die zur Laufzeit Typlöschung nutzen, um Typinformationen zur Kompilierungszeit beizubehalten. Generische Lambdas hingegen erstellen statisch spezialisierte Abschlüsse mit expliziten Typen.
Das obige ist der detaillierte Inhalt vonWie funktionieren generische Lambdas in C 14?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!