lambdas c with examples
Erfahren Sie alles über Lambda-Ausdruck in C ++ in einfachen Worten.
Der Lambda-Ausdruck ist das neueste Konzept in C ++, das ab C ++ 11 eingeführt wurde.
In diesem Tutorial lernen wir Lambdas in C ++ kennen. Wir werden auch diskutieren, wie Lambdas im Programm definiert und verwendet werden können.
=> Überprüfen Sie hier die komplette C ++ - Schulungsserie.
Was du lernen wirst:
Lambda-Ausdrücke / Funktionen
Lambdas, wie sie allgemein genannt werden, sind im Grunde genommen kleine Inline-Codeausschnitte, die innerhalb von Funktionen oder sogar Funktionsaufrufanweisungen verwendet werden können. Sie werden nicht benannt oder wiederverwendet.
Wir können Lambdas als 'auto' deklarieren und sie überall im Programm verwenden.
Wie verwende / schreibe ich Lambdas?
Die allgemeine Syntax zum Definieren von Lambdas lautet wie folgt:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Verschluss erfassen : Lambda-Einführer gemäß C ++ - Spezifikation.
Parameterliste : Wird auch als Lambda-Deklaration bezeichnet. Ist optional und ähnelt der Parameterliste einer Methode.
Veränderlich : Optional. Ermöglicht das Ändern von Variablen, die von einem Aufruf nach Wert erfasst wurden.
Ausnahme : Ausnahmespezifikation. Optional. Verwenden Sie 'noexcept', um anzuzeigen, dass Lambda keine Ausnahme auslöst.
Rückgabetyp : Optional. Der Compiler leitet den Rückgabetyp des Ausdrucks selbst ab. Da Lambdas jedoch komplexer werden, ist es besser, den Rückgabetyp einzuschließen, da der Compiler den Rückgabetyp möglicherweise nicht ableiten kann.
Methodendefinition : Lambda Körper.
fire TV stick VPN kostenlos
Eine Erfassungsklausel der Lambda-Definition wird verwendet, um anzugeben, welche Variablen erfasst werden und ob sie als Referenz oder als Wert erfasst werden.
Ein leerer Capture-Abschluss () zeigt an, dass Lambda keine Variablen verwendet. Dies bedeutet, dass nur auf lokale Variablen zugegriffen werden kann.
Der Modus 'Capture-Standard' gibt an, wie außerhalb der in Lambda referenzierten Variablen erfasst werden soll:
- Der Erfassungsabschluss (&) bedeutet, dass die Variablen als Referenz erfasst werden.
- Der Erfassungsabschluss (=) zeigt an, dass die Variablen nach Wert erfasst werden.
Wenn wir eine Capture-Standard- und eine Capture-Klausel haben, können wir keinen Bezeichner in der Erfassung dieser bestimmten Erfassung haben, der den Bezeichner & haben kann. Wenn die Capture-Klausel Capture-Default = enthält, kann die Capture-Klausel nicht den Bezeichner form = haben. Außerdem darf ein Bezeichner oder 'dies' in der Erfassungsklausel nur einmal vorkommen.
Dies sollte aus den folgenden Beispielen ersichtlich sein.
(&sum, sum_var) //OK, explicitly specified capture by value (sum_var, &sum) //ok, explicitly specified capture by reference (&, &sum_var) // error, & is the default still sum_var preceded by & (i, i) //error, i is used more than once
Hier sind sum, sum_var und I die Variablen, die in Lambda erfasst und verwendet werden sollen.
Im Folgenden finden Sie ein grundlegendes Beispiel für einen Lambda-Ausdruck in C ++.
#include #include using namespace std; int main() { auto sum = ()(int a, int b) { return a + b; }; cout <<'Sum of two integers:'<< sum(5, 6) << endl; return 0; }
Ausgabe:
Summe zweier Ganzzahlen: 11
Hier haben wir einen Inline-Lambda-Ausdruck, um die Summe zweier Werte zu berechnen. Wir haben den Wertetyp a und b als Ganzzahlen angegeben.
Ein Problem mit dem obigen Code ist, dass er nur für ganze Zahlen funktioniert. Wenn wir später im Programm zwei Doubles oder Strings oder andere Typen hinzufügen möchten, müssen wir diese vielen Lambdas haben. Dies ist keine effiziente Art der Programmierung.
Wir können dieses Problem mithilfe von Vorlagenparametern beheben. Dadurch werden Lambdas für alle Datentypen verallgemeinert. Dies erfolgt ab C ++ 14.
Das obige Programm wird also wie folgt geändert:
#include #include using namespace std; int main() { // generalized lambda auto sum = ()(auto a, auto b) { return a + b; }; cout <<'Sum(5,6) = '<< sum(5, 6) << endl; // sum of two integers cout <<'Sum(2.0,6.5) = '< Ausgabe:
Summe (5,6) = 11
Summe (2,0,6,5) = 8,5
Summe ((Zeichenfolge ('SoftwareTesting'), Zeichenfolge ('help.com')) = SoftwareTestinghelp.com
Daher haben wir in diesem Programm eine generische Lambda-Summe verwendet, mit der die Summe der beiden Objekte eines beliebigen Typs ermittelt werden kann. Beachten Sie, dass wir das Schlüsselwort 'auto' verwendet haben, um anzugeben, dass der Datentyp des Parameters basierend auf den Daten abgeleitet wird.
Um die Verwendung dieses Lambda zu demonstrieren, haben wir es mit drei verschiedenen Datentypen verwendet: int, float und string. Aus der Ausgabe wissen wir, dass je nach Datentyp eine Summenoperation ausgeführt wird. Zum Beispiel, Wenn wir der Lambda-Summe Zeichenfolgenparameter geben, werden die beiden Zeichenfolgen verkettet.
Fazit
Wir sind am Ende dieses Tutorials zu Lambda-Ausdrücken in C ++ angelangt. Dies ist das neueste Konzept in C ++ und kann sehr hilfreich sein, wenn wir einen kleinen Codefragment inline ausführen müssen. Lambdas können auch generisch gemacht und für alle Datentypen verwendet werden.
In unserem nächsten Tutorial werden wir einige der zusätzlichen Themen in C ++ wie Zeit, Standardeingabe / -ausgabe und Protokollierung diskutieren.
Orakel SQL-Fragen Interview Fragen und Antworten für erfahrene
=> Lesen Sie hier die beliebte C ++ - Schulungsserie.
Literatur-Empfehlungen
- Was ist ein Vergleichstest (Lernen mit Beispielen)
- Python DateTime Tutorial mit Beispielen
- Befehl in Unix mit Beispielen ausschneiden
- Unix Cat-Befehlssyntax, Optionen mit Beispielen
- Verwendung des Cursors in MongoDB mit Beispielen
- Ls-Befehl unter Unix mit Beispielen
- Datums- und Uhrzeitfunktionen in C ++ mit Beispielen
- MongoDB Sort () -Methode mit Beispielen