C++lambda


Sintassi

  • [ default-capture , capture-list ] ( argomento-elenco ) attributi mutable throw-specification -> return-type { lambda-body } // Order of lambda specificatori e attributi.
  • [ capture-list ] ( argument-list ) { lambda-body } // Definizione lambda comune.
  • [=] ( argument-list ) { lambda-body } // Cattura tutte le variabili locali necessarie per valore.
  • [&] ( argument-list ) { lambda-body } // Cattura tutte le variabili locali necessarie per riferimento.
  • [ capture-list ] { lambda-body } // L'elenco degli argomenti e gli specificatori possono essere omessi.

Parametri

Parametro Dettagli
default-capture Specifica come vengono catturate tutte le variabili non elencate. Può essere = (acquisizione per valore) o & (acquisizione per riferimento). Se omesso, le variabili non elencate sono inaccessibili all'interno del corpo lambda . L' acquisizione di default deve precedere la lista di cattura .
capture-list Specifica in che modo le variabili locali sono rese accessibili all'interno del corpo lambda . Le variabili senza prefisso vengono catturate dal valore. Le variabili con prefisso & vengono acquisite per riferimento. All'interno di un metodo di classe, this può essere usato per rendere tutti i suoi membri accessibili per riferimento. Le variabili non elencate sono inaccessibili, a meno che l'elenco non sia preceduto da un'acquisizione predefinita .
argument-list Specifica gli argomenti della funzione lambda.
mutevole (facoltativo) Normalmente le variabili acquisite dal valore sono const . La specifica di mutable li rende non-const. Le modifiche a tali variabili vengono mantenute tra le chiamate.
gettare-specifica (facoltativo) Specifica il comportamento di lancio delle eccezioni della funzione lambda. Ad esempio: noexcept o throw(std::exception) .
attributi (opzionale) Qualsiasi attributo per la funzione lambda. Ad esempio, se il corpo lambda genera sempre un'eccezione, allora [[noreturn]] può essere usato.
-> tipo di ritorno (opzionale) Specifica il tipo di ritorno della funzione lambda. Obbligatorio quando il tipo di ritorno non può essere determinato dal compilatore.
lambda-body Un blocco di codice contenente l'implementazione della funzione lambda.

Osservazioni

C ++ 17 (la bozza attuale) introduce constexpr , fondamentalmente lambda che può essere valutato in fase di compilazione. Un lambda è automaticamente constexpr se soddisfa i requisiti di constexpr , ma è anche possibile specificarlo usando la parola chiave constexpr :

//Explicitly define this lambdas as constexpr
[]() constexpr {
    //Do stuff
}

lambda Esempi correlati