lambdas c with examples
Lär dig allt om Lambda-uttryck i C ++ i enkla termer.
Lambda expression är det nyaste konceptet i C ++ som introducerades från C ++ 11 och framåt.
I den här handledningen lär vi oss om lambdas i C ++. Vi kommer också att diskutera hur lambdas kan definieras och användas i programmet.
=> Kolla hela C ++ träningsserien här.
Vad du kommer att lära dig:
Lambdauttryck / funktioner
Lambdas, som de brukar kallas, är i grunden små inbyggda kodavsnitt som kan användas i funktioner eller till och med funktionssamtal. De namnges inte eller återanvänds.
Vi kan förklara lambdas som ”auto” och använda dem var som helst i programmet.
Hur man använder / skriver Lambdas?
Den allmänna syntaxen för att definiera lambdas är som följer:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Fånga stängning : Lambda introducer enligt C ++ specifikation.
Parameterlista : Kallas också som lambdadeklarationer. Är valfritt och liknar parameterlistan för en metod.
Föränderlig : Valfritt. Gör det möjligt att ändra variabler som fångas av ett samtal efter värde.
undantag : Undantagsspecifikation. Frivillig. Använd “noexcept” för att indikera att lambda inte kastar ett undantag.
Return_type : Valfritt. Kompilatorn härleder uttrycket returtyp på egen hand. Men eftersom lambdas blir mer komplexa är det bättre att inkludera returtyp eftersom kompilatorn kanske inte kan härleda returtypen.
Metoddefinition : Lambda-kropp.
En fångstklausul för lambdadefinition används för att specificera vilka variabler som fångas och om de fångas genom referens eller efter värde.
En tom fångstängning () indikerar att inga variabler används av lambda, vilket innebär att den bara kan komma åt variabler som är lokala för den.
'Capture-default' -läget indikerar hur man fångar utanför de variabler som refereras till i Lambda:
- Fångststängningen (&) betyder att variablerna fångas genom referens.
- Fångststängningen (=) indikerar att variablerna fångas upp efter värde.
Om vi har en capture-standard och en capture-klausul, kan vi inte ha en identifierare i capture av den specifika capture kan ha & identifieraren. På samma sätt, om fångstklausulen innehåller capture-default =, kan fångstklausulen inte ha form = identifieraren. Dessutom kan en identifierare eller ”detta” inte visas mer än en gång i fångstklausulen.
Detta bör framgå av följande exempel.
(&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
Här är sum, sum_var och I de variabler som ska fångas och användas i lambda.
Nedan ges ett grundläggande exempel på ett Lambda-uttryck i 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; }
Produktion:
.net intervju frågor och svar
Summan av två heltal: 11
Här har vi inbyggt lambdauttryck för att beräkna summan av två värden. Vi har angett typen av värden a och b som heltal.
Ett problem med ovanstående kod är att den bara fungerar för heltal. Om vi senare i programmet vill lägga till två dubblar eller strängar eller andra typer, måste vi ha så många lambdas. Detta är inte ett effektivt sätt att programmera.
Vi kan övervinna detta problem genom att använda mallparametrar. Detta gör lambdas generaliserade för alla datatyper. Detta görs från och med C ++ 14.
Så programmet ovan kommer att ändras enligt följande:
#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) = '< Produktion:
Summa (5,6) = 11
Summa (2,0,6,5) = 8,5
Sum ((string (“SoftwareTesting”), string (“help.com”)) = SoftwareTestinghelp.com
Således har vi i det här programmet använt en generisk lambdasumma, som kan användas för att hitta summan av de två objekten av vilken typ som helst. Observera att vi har använt 'auto' nyckelord för att indikera att datatypen för parametern kommer att härledas baserat på data.
För att demonstrera användningen av denna lambda har vi använt den med tre olika datatyper, int, float och string. Från utgången vet vi att beroende på typ av data utförs summanövrering. Till exempel, när vi levererar strängparametrar till lambdasumman sammanfogas de två strängarna.
Slutsats
Vi har kommit till slutet av denna handledning om lambdauttryck i C ++. Detta är det senaste konceptet i C ++ och kan vara till stor hjälp när vi behöver köra ett litet kodavsnitt inline. Lambdas kan också göras generiska och användas för alla datatyper.
I vår kommande handledning kommer vi att diskutera några av de ytterligare ämnena i C ++ som tid, standardinmatning / utdata och loggning.
=> Läs igenom den populära C ++ träningsserien här.
Rekommenderad läsning
- Vad är jämförelsetestning (lär dig med exempel)
- Python DateTime-handledning med exempel
- Klipp kommandot i Unix med exempel
- Unix Cat Command Syntax, alternativ med exempel
- Användning av markören i MongoDB med exempel
- Ls Command i Unix med exempel
- Funktioner för datum och tid i C ++ med exempel
- MongoDB Sort () -metod med exempel