lambdas c with examples
Lær alt om Lambda-uttrykk i C ++ i enkle termer.
Lambda expression er det nyeste konseptet i C ++ som ble introdusert fra C ++ 11 og utover.
I denne opplæringen vil vi lære om lambdas i C ++. Vi vil også diskutere hvordan lambdas kan defineres og brukes i programmet.
=> Sjekk den komplette C ++ treningsserien her.
Hva du vil lære:
Lambda-uttrykk / funksjoner
Lambdas, som de ofte kalles, er i utgangspunktet små kodebiter med kode som kan brukes i funksjoner eller til og med funksjonssamtaler. De blir ikke navngitt eller gjenbrukt.
Vi kan erklære lambdas som “auto” og bruke dem hvor som helst i programmet.
Hvordan bruke / skrive Lambdas?
Den generelle syntaksen for å definere lambdas er som følger:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Fange nedleggelse : Lambda introduserer i henhold til C ++ spesifikasjon.
Parameterliste : Også kalt som lambdadeklarasjoner. Er valgfri og ligner parameterlisten til en metode.
Muterbar : Valgfritt. Gjør det mulig å endre variabler fanget av et anrop etter verdi.
unntak : Unntaksspesifikasjon. Valgfri. Bruk “noexcept” for å indikere at lambda ikke kaster et unntak.
Return_type : Valgfritt. Kompilatoren trekker tilbake returtypen til uttrykket alene. Men ettersom lambdas blir mer komplekse, er det bedre å inkludere returtype, ettersom kompilatoren kanskje ikke kan utlede returtypen.
Metodedefinisjon : Lambda-kropp.
En fangstklausul av lambdadefinisjon brukes til å spesifisere hvilke variabler som fanges og om de fanges opp ved referanse eller etter verdi.
En tom fangstlukking () indikerer at ingen variabler brukes av lambda, noe som betyr at den bare har tilgang til variabler som er lokale for den.
Modusen 'capture-default' indikerer hvordan du fanger utenfor variablene det er referert til i Lambda:
- Fangslukkingen (&) betyr at variablene fanges ved referanse.
- Fangslukkingen (=) indikerer at variablene fanges opp etter verdi.
Hvis vi har en fangst-standard og en fangstklausul, kan vi ikke ha en identifikator i fangsten av den spesielle fangsten kan ha & identifikatoren. På samme måte, hvis fangstklausulen inneholder capture-default =, kan fangstklausulen ikke ha form = identifikator. En identifikator eller ‘dette’ kan heller ikke vises mer enn én gang i fangstklausulen.
Dette bør være tydelig fra følgende eksempler.
standard gateway ikke tilgjengelig windows 10 wifi
(&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 variablene som skal fanges og brukes i lambda.
Nedenfor er et grunnleggende eksempel på et Lambda-uttrykk 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; }
Produksjon:
Summen av to heltall: 11
Her har vi innebygd lambdauttrykk for å beregne summen av to verdier. Vi har spesifisert typen verdier a og b som heltall.
Et problem med koden ovenfor er at den bare fungerer for heltall. Hvis vi senere i programmet vil legge til to dobler eller strenger eller andre typer, må vi ha så mange lambdas. Dette er ikke en effektiv måte å programmere på.
Vi kan løse dette problemet ved å bruke malparametere. Dette gjør lambdas generalisert for alle datatyper. Dette gjøres fra C ++ 14 og utover.
Så programmet ovenfor vil bli endret 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) = '< Produksjon:
Sum (5,6) = 11
Sum (2,0,6,5) = 8,5
Sum ((streng (“SoftwareTesting”), string (“help.com”)) = SoftwareTestinghelp.com
I dette programmet har vi således brukt en generisk lambdasum, som kan brukes til å finne summen av de to objektene av hvilken som helst type. Merk at vi har brukt ‘auto’ nøkkelord for å indikere at datatypen til parameteren vil bli trukket ut basert på dataene.
For å demonstrere bruken av denne lambdaen, har vi brukt den med tre forskjellige datatyper, int, float og string. Fra utgangen vet vi at i henhold til datatypen utføres sumoperasjon. For eksempel, når vi leverer strengparametere til lambdasummen, sammenkobles de to strengene.
Konklusjon
Vi har kommet til slutten av denne veiledningen om lambdauttrykk i C ++. Dette er det nyeste konseptet i C ++ og kan være veldig nyttig når vi trenger å utføre et lite kodebit. Lambdas kan også gjøres generiske og brukes til alle datatyper.
I vår kommende opplæring vil vi diskutere noen av de ekstra emnene i C ++ som tid, standard input / output og logging.
=> Les gjennom den populære C ++ treningsserien her.
Anbefalt lesing
- Hva er sammenligningstesting (lær med eksempler)
- Python DateTime Tutorial med eksempler
- Klipp kommandoen i Unix med eksempler
- Unix Cat Command Syntax, Alternativer med eksempler
- Bruk av markør i MongoDB med eksempler
- Ls Command i Unix med eksempler
- Funksjoner for dato og tid i C ++ med eksempler
- MongoDB Sort () Metode med eksempler