Generische Lambdas in der C 14-Variante des Auto-Schlüsselworts verstehen
In C 14 generische Lambdas, eine Art Lambda-Ausdruck mit dem Auto-Schlüsselwort as ein Argumenttyp, bieten erhöhte Flexibilität. Im Gegensatz zu C 11-Lambdas mit einem Nicht-Template-Aufrufoperator verfügen generische Lambdas über einen Template-Aufrufoperator innerhalb des von ihnen definierten Abschlusstyps.
Zum Beispiel zeigt der folgende Code ein generisches Lambda:
auto glambda = [](auto a) { return a; };
In diesem Fall wird der Verschlusstyp von Glambda wie folgt definiert:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
Das bedeutet, dass Glambda ein ist Instanz eines eindeutigen, unbenannten Funktors mit einem vorlagenbasierten Aufrufoperator. Jedes Vorkommen von auto in der Parameterdeklaration des Lambda entspricht einem erfundenen Typvorlagenparameter, der es dem Aufrufoperator ermöglicht, Argumente verschiedener Typen zu verarbeiten.
Der C 14-Standard (n3690) legt fest, dass der Aufrufoperator vom Abschlusstyp ist Für ein generisches Lambda gibt es eine Vorlagenparameterliste mit einem erfundenen Typvorlagenparameter für jedes Auto in der Parameterdeklarationsklausel des Lambda. Der Rückgabetyp und die Funktionsparameter werden aus der Trailing-Return-Type- und Parameter-Declaration-Clause des Lambda abgeleitet, wobei auto durch den Namen des entsprechenden erfundenen Template-Parameters ersetzt wird.
Zusammenfassend: generische Lambdas in C 14 stellen eindeutige, unbenannte Funktoren mit vorgefertigten Aufrufoperatoren dar. Dies unterscheidet sich vom vorlagenbasierten C-Polymorphismus, bei dem der Compiler für jeden Argumenttyp neue Funktionen mit ersetzten Typen generiert. Es orientiert sich stärker an den Generika von Java, die das Löschen von Typen während der Kompilierung beinhalten.
Das obige ist der detaillierte Inhalt vonWie erreichen generische C 14-Lambdas mithilfe des Schlüsselworts „auto' Typflexibilität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!