lambdas c with examples
Scopri tutto sull'espressione Lambda in C ++ in termini semplici.
L'espressione lambda è il concetto più recente in C ++ introdotto da C ++ 11 in poi.
In questo tutorial impareremo a conoscere i lambda in C ++. Discuteremo anche di come i lambda possono essere definiti e utilizzati nel programma.
=> Controlla qui la serie completa di formazione C ++.
Cosa imparerai:
Espressioni / funzioni Lambda
Lambdas, come vengono comunemente chiamati, sono fondamentalmente piccoli frammenti di codice inline che possono essere utilizzati all'interno di funzioni o anche istruzioni di chiamata di funzione. Non vengono nominati né riutilizzati.
Possiamo dichiarare lambda come 'auto' e usarli ovunque nel programma.
miglior antivirus con VPN
Come usare / scrivere Lambda?
La sintassi generale per la definizione di lambda è la seguente:
(Capture clause) (parameter_list) mutable exception ->return_type { Method definition; }
Cattura chiusura : Lambda introducer secondo le specifiche C ++.
Elenco dei parametri : Chiamato anche come dichiarazioni lambda. È facoltativo ed è simile all'elenco dei parametri di un metodo.
Mutevole : Opzionale. Consente di modificare le variabili catturate da una chiamata in base al valore.
eccezione : Specifica di eccezione. Opzionale. Utilizza 'noexcept' per indicare che lambda non genera un'eccezione.
Return_type : Opzionale. Il compilatore deduce da solo il tipo di ritorno dell'espressione. Ma poiché i lambda diventano più complessi, è meglio includere il tipo restituito poiché il compilatore potrebbe non essere in grado di dedurre il tipo restituito.
Definizione del metodo : Corpo lambda.
Una clausola di cattura della definizione lambda viene utilizzata per specificare quali variabili vengono acquisite e se vengono acquisite per riferimento o per valore.
Una chiusura di cattura vuota [], indica che nessuna variabile viene utilizzata da lambda, il che significa che può accedere solo alle variabili locali ad esso.
La modalità 'capture-default' indica come acquisire al di fuori delle variabili a cui fa riferimento Lambda:
- La chiusura della cattura [&] significa che le variabili vengono catturate per riferimento.
- La chiusura della cattura [=] indica che le variabili vengono catturate per valore.
Se abbiamo una clausola di cattura predefinita e una clausola di cattura, allora non possiamo avere un identificatore nella cattura di quella particolare cattura può avere l'identificatore &. Allo stesso modo, se la clausola di cattura contiene capture-default =, la clausola di cattura non può avere la forma = identificatore. Inoltre, un identificatore o 'questo' non può apparire più di una volta nella clausola di cattura.
Questo dovrebbe essere chiaro dai seguenti esempi.
[&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
Qui, sum, sum_var e I sono le variabili da catturare e utilizzare in lambda.
Di seguito è riportato un esempio di base di un'espressione Lambda 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; }
Produzione:
Somma di due numeri interi: 11
Qui abbiamo un'espressione lambda in linea per calcolare la somma di due valori. Abbiamo specificato il tipo di valori aeb come numeri interi.
Un problema con il codice sopra è che funziona solo per i numeri interi. Se più avanti nel programma, vogliamo aggiungere due double o stringhe o qualsiasi altro tipo, dovremo avere quei molti lambda. Questo non è un modo efficiente di programmare.
Possiamo superare questo problema utilizzando i parametri del modello. Ciò rende i lambda generalizzati per tutti i tipi di dati. Questo viene fatto da C ++ 14 in poi.
Quindi il programma sopra sarà modificato come segue:
#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) = '< Produzione:
Somma (5,6) = 11
Somma (2.0,6.5) = 8.5
Sum ((string ('SoftwareTesting'), string ('help.com')) = SoftwareTestinghelp.com
Quindi in questo programma abbiamo utilizzato una somma lambda generica, che può essere utilizzata per trovare la somma dei due oggetti di qualsiasi tipo. Tieni presente che abbiamo utilizzato la parola chiave 'auto' per indicare che il tipo di dati del parametro verrà dedotto in base ai dati.
Per dimostrare l'utilizzo di questo lambda, lo abbiamo utilizzato con tre diversi tipi di dati, int, float e string. Dall'output sappiamo che in base al tipo di dato viene eseguita un'operazione di somma. Per esempio, quando forniamo parametri stringa a lambda sum, concatena le due stringhe.
Conclusione
Siamo giunti alla fine di questo tutorial sulle espressioni lambda in C ++. Questo è il concetto più recente in C ++ e può essere molto utile quando abbiamo bisogno di eseguire un piccolo frammento di codice inline. Lambdas può anche essere reso generico e utilizzato per tutti i tipi di dati.
Nel nostro prossimo tutorial, discuteremo alcuni degli argomenti aggiuntivi in C ++ come tempo, input / output standard e registrazione.
=> Leggi qui la popolare serie di formazione C ++.
Lettura consigliata
- Che cos'è il test di confronto (impara con esempi)
- Tutorial Python DateTime con esempi
- Comando Taglia in Unix con esempi
- Sintassi dei comandi Cat Unix, opzioni con esempi
- Utilizzo del cursore in MongoDB con esempi
- Comando Ls in Unix con esempi
- Funzioni di data e ora in C ++ con esempi
- Metodo MongoDB Sort () con esempi