lambdas c with examples
Lær alt om Lambda-ekspression i C ++ i enkle termer.
Lambda-udtryk er det nyeste koncept i C ++, der blev introduceret fra C ++ 11 og fremefter.
I denne vejledning lærer vi om lambdas i C ++. Vi vil også diskutere, hvordan lambdas kan defineres og bruges i programmet.
=> Tjek den komplette C ++ træningsserie her.
Hvad du vil lære:
Lambda-udtryk / funktioner
Lambdas, som de almindeligvis kaldes, er dybest set små kodestykker, der kan bruges inde i funktioner eller endda funktionsopkaldsangivelser. De navngives ikke eller genbruges.
Vi kan erklære lambdas som “auto” og bruge dem hvor som helst i programmet.
Hvordan man bruger / skriver Lambdas?
Den generelle syntaks ved definition af lambdas er som følger:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Capture lukning : Lambda introducer i henhold til C ++ specifikation.
Parameterliste : Også kaldet som lambdadeklarationer. Er valgfri og svarer til parameterlisten for en metode.
Omskiftelig : Valgfrit. Gør det muligt at ændre variabler fanget af et opkald efter værdi.
undtagelse : Undtagelsesspecifikation. Valgfri. Brug “noexcept” til at angive, at lambda ikke kaster en undtagelse.
Return_type : Valgfrit. Compileren udleder udtrykkets returneringstype alene. Men da lambdas bliver mere komplekse, er det bedre at inkludere returtype, da kompilatoren muligvis ikke kan udlede returtypen.
Metodedefinition : Lambda krop.
En fangstklausul for lambdadefinition bruges til at specificere, hvilke variabler der fanges, og om de fanges ved reference eller efter værdi.
En tom fangstlukning () angiver, at ingen variabler bruges af lambda, hvilket betyder, at den kun kan få adgang til variabler, der er lokale for den.
'Capture-default' -tilstanden angiver, hvordan man fanger uden for de variabler, der er henvist til i Lambda:
- Fangslukningen (&) betyder, at variablerne fanges ved reference.
- Fangslukningen (=) angiver, at variablerne fanges efter værdi.
Hvis vi har en capture-standard og en capture-klausul, kan vi ikke have en identifikator i fangsten af den pågældende capture kan have & identifikatoren. Tilsvarende, hvis capture-klausulen indeholder capture-default =, så kan capture-klausulen ikke have form = identifikatoren. En identifikator eller 'dette' kan heller ikke vises mere end én gang i fangstklausulen.
hvordan man åbner en torrent-fil
Dette skal fremgå af de følgende eksempler.
(&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
Her er sum, sum_var og I de variabler, der skal fanges og bruges i lambda.
Nedenfor er et grundlæggende eksempel på et Lambda-udtryk 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:
Summen af to heltal: 11
Her har vi indbygget lambda-udtryk for at beregne summen af to værdier. Vi har angivet typen af værdier a og b som heltal.
Et problem med ovenstående kode er, at den kun fungerer for heltal. Hvis vi senere i programmet vil tilføje to dobbelt eller strenge eller andre typer, bliver vi nødt til at have de mange lambdas. Dette er ikke en effektiv måde at programmere på.
Vi kan løse dette problem ved hjælp af skabelonparametre. Dette gør lambdas generaliseret til alle datatyper. Dette gøres fra C ++ 14 og fremefter.
Så ovenstående program vil blive ændret som følger:
#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:
Sum (5,6) = 11
Sum (2,0,6,5) = 8,5
Sum ((streng ('SoftwareTesting'), streng ('help.com')) = SoftwareTestinghelp.com
Således har vi i dette program brugt en generisk lambda-sum, som kan bruges til at finde summen af de to objekter af enhver type. Bemærk, at vi har brugt 'auto' nøgleord til at indikere, at datatypen for parameteren vil blive udledt baseret på dataene.
For at demonstrere brugen af denne lambda har vi brugt den med tre forskellige datatyper, int, float og streng. Fra output ved vi, at der i henhold til datatypen udføres sumoperation. For eksempel, når vi leverer strengparametre til lambdasummen, sammenkædes de to strenge.
Konklusion
Vi er kommet til slutningen af denne tutorial om lambda-udtryk i C ++. Dette er det nyeste koncept i C ++ og kan være meget nyttigt, når vi skal udføre et lille kodestykke inline. Lambdas kan også laves generiske og bruges til alle datatyper.
I vores kommende tutorial vil vi diskutere nogle af de ekstra emner i C ++ som tid, standard input / output og logning.
=> Læs gennem den populære C ++ træningsserie her.
Anbefalet læsning
- Hvad er sammenligningstest (lær med eksempler)
- Python DateTime-tutorial med eksempler
- Klip kommando i Unix med eksempler
- Unix Cat Command Syntax, indstillinger med eksempler
- Brug af markør i MongoDB med eksempler
- Ls Command i Unix med eksempler
- Funktioner til dato og tid i C ++ med eksempler
- MongoDB Sort () metode med eksempler