Heim >Backend-Entwicklung >C++ >Wie funktionieren generische Lambdas in C 14?

Wie funktionieren generische Lambdas in C 14?

Susan Sarandon
Susan SarandonOriginal
2024-12-06 00:53:11141Durchsuche

How Do Generic Lambdas in C  14 Work?

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:

  • Jedes Vorkommen von [auto](https://en.cppreference.com/w/cpp/keyword/auto) in der Parameterliste entspricht einem erfundenen Typvorlagenparameter.
  • Der Rückgabetyp und die Funktionsparameter des Aufrufoperators werden abgeleitet aus der abschließenden Rückgabetyp- und Parameterdeklarationsklausel des Lambda, indem jedes [auto](https://en.cppreference.com/w/cpp/keyword/auto) durch die erfundenen Vorlagenparameter ersetzt wird Name.

Ä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!

Stellungnahme:
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