lambdas c with examples
Obteniu més informació sobre l’expressió Lambda en C ++ en termes senzills.
L’expressió Lambda és el concepte més nou de C ++ que es va introduir a partir de C ++ 11.
En aquest tutorial, aprendrem sobre lambdas en C ++. També parlarem de com es poden definir i utilitzar lambdas al programa.
=> Consulteu aquí la sèrie completa de formació C ++.
Què aprendreu:
Expressions / Funcions de Lambda
Les lambdas, com se sol anomenar, són bàsicament petits fragments de codi en línia que es poden utilitzar dins de funcions o fins i tot sentències de trucades de funcions. No s’anomenen ni es reutilitzen.
Podem declarar lambdas com a 'automàtic' i utilitzar-los a qualsevol lloc del programa.
Com utilitzar / escriure Lambdas?
La sintaxi general de definir lambdas és la següent:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Tancament de la captura : Introducció Lambda segons l'especificació de C ++.
Llista de paràmetres : També es diu com a declaracions lambda. És opcional i és similar a la llista de paràmetres d’un mètode.
Mutable : Opcional. Permet modificar les variables capturades per una trucada per valor.
la passarel·la per defecte no està disponible Windows 10 ethernet
excepció : Especificació d'excepció. Opcional. Utilitzeu 'noexcept' per indicar que lambda no produeix cap excepció.
Retorn_tipus : Opcional. El compilador dedueix el tipus de retorn de l’expressió per si sol. Però a mesura que les lambdas es tornen més complexes, és millor incloure el tipus de retorn ja que és possible que el compilador no pugui deduir el tipus de retorn.
Definició del mètode : Cos lambda.
S'utilitza una clàusula de captura de definició lambda per especificar quines variables es capturen i si es capturen per referència o per valor.
Un tancament de captura buit [], indica que lambda no utilitza cap variable, de manera que només pot accedir a variables que li són locals.
El mode 'captura per defecte' indica com capturar fora de les variables a què fa referència Lambda:
- El tancament de captura [&] significa que les variables es capturen per referència.
- El tancament de la captura [=] indica que les variables es capturen per valor.
Si tenim una clàusula de captura per defecte i una captura, no podem tenir un identificador en la captura d’aquesta captura en concret que pugui tenir l’identificador &. De la mateixa manera, si la clàusula de captura conté capture-default =, la clàusula de captura no pot tenir l’identificador form =. A més, un identificador o 'això' no pot aparèixer més d'una vegada a la clàusula de captura.
Això hauria de quedar clar en els exemples següents.
[&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
Aquí, sum, sum_var i jo som les variables que cal capturar i utilitzar a lambda.
A continuació es mostra un exemple bàsic d’una expressió Lambda en 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; }
Sortida:
Suma de dos enters: 11
Aquí tenim l’expressió lambda en línia per calcular la suma de dos valors. Hem especificat el tipus de valors a i b com a enters.
Un problema amb el codi anterior és que només funciona per a enters. Si més endavant al programa, volem afegir dos dobles o cordes o qualsevol altre tipus, haurem de tenir aquestes moltes lambdas. Aquesta no és una manera eficient de programar.
Podem superar aquest problema utilitzant paràmetres de plantilla. Això fa que les lambdas es generalitzin per a tots els tipus de dades. Això es fa a partir de C ++ 14.
Per tant, el programa anterior es modificarà de la següent manera:
proves funcionals vs proves no funcionals
#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) = '< Sortida:
Suma (5,6) = 11
Suma (2,0,6,5) = 8,5
Sum ((string ('SoftwareTesting'), string ('help.com')) = SoftwareTestinghelp.com
Així, en aquest programa, hem utilitzat una suma lambda genèrica, que es pot utilitzar per trobar la suma dels dos objectes de qualsevol tipus. Tingueu en compte que hem utilitzat la paraula clau 'automàtic' per indicar que el tipus de dades del paràmetre es deduirà en funció de les dades.
Per demostrar l’ús d’aquesta lambda, l’hem utilitzat amb tres tipus de dades diferents, int, float i string. A partir de la sortida, sabem que segons el tipus de dades, es realitza una operació de suma. Per exemple, quan subministrem paràmetres de cadena a lambda sum, concatena les dues cadenes.
Conclusió
Hem arribat al final d’aquest tutorial sobre expressions lambda en C ++. Aquest és el concepte més recent de C ++ i pot ser molt útil quan necessitem executar un petit fragment de codi en línia. Lambdas també es pot fer genèric i utilitzar-se per a tots els tipus de dades.
Al nostre proper tutorial, parlarem d’alguns dels temes addicionals de C ++ com ara el temps, l’entrada / sortida estàndard i el registre.
=> Llegiu aquí la popular sèrie de formació C ++.
Lectura recomanada
- Què és la prova de comparació (apreneu amb exemples)
- Tutorial de Python DateTime amb exemples
- Talla l'ordre a Unix amb exemples
- Sintaxi d'ordres Unix Cat, opcions amb exemples
- Ús del cursor a MongoDB amb exemples
- Ordre Ls a Unix amb exemples
- Funcions de data i hora a C ++ amb exemples
- MongoDB Sort () Mètode amb exemples