Heim > Backend-Entwicklung > C++ > Wie erreichen generische C 14-Lambdas mithilfe des Schlüsselworts „auto' Typflexibilität?

Wie erreichen generische C 14-Lambdas mithilfe des Schlüsselworts „auto' Typflexibilität?

Patricia Arquette
Freigeben: 2024-12-16 16:36:17
Original
816 Leute haben es durchsucht

How Do C  14 Generic Lambdas Achieve Type Flexibility Using the `auto` Keyword?

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; };
Nach dem Login kopieren

In diesem Fall wird der Verschlusstyp von Glambda wie folgt definiert:

class /* unnamed */
{
public:
    template<typename T>
    T operator () (T a) const { return a; }
};
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage