Espressione lambda per semplificare il codice. Questo:
auto fun = []() { return; };
è sostituito dal compilatore con:
// Namespace scope
struct __lambda_1 {
void operator()() { return; }
};
// local scope
__lambda_1 fun{};
Questa è la motivazione principale per la sintassi lambda: Per sostituire gli oggetti funzione tradizionale con una più facile da leggere funzione anonima dichiarato nel sito in cui è necessario, piuttosto che avere un oggetto funzione separato che deve essere dichiarato in un altro ambito. Non si tratta semplicemente di sostituire gli oggetti funzione con nome.
Infatti, la libreria standard include un numero di oggetti funzione con nome come std::unary_function
e cose come std::less
. Ma questi oggetti hanno un'utilità limitata e non possono assumere ogni ruolo potenziale che un lambda farebbe.
Quindi, sì, può rendere il codice sostanzialmente più leggibile, inserendo il codice che la libreria standard non fornisce esattamente dove è richiesto, senza inquinare il codice con dozzine di righe struct
e inquinando il proprio spazio dei nomi con i nomi che si ' probabilmente non usare più di una o due volte.
La versione lambda non è più lunga. Quello non-lambda è incompleto, poiché non abbiamo la definizione di 'Less_than'. –
Com'è 'Less_than (x)' una "definizione di funzione normale" ??? A giudicare dal tuo primo esempio, sembra che tu debba associare il valore di 'x' a un funtore di comparazione a due parametri, convertendolo in un comparatore a parametro singolo. Questa è già una funzionalità che va ben oltre la "normale definizione della funzione". –
AnT