C++Lambdas


Sintaxis

  • [ captura por defecto , lista de captura ] ( lista de argumentos ) atributos de especificación de lanzamiento mutable -> return-type { lambda-body } // Orden de los especificadores y atributos de lambda.
  • [ lista de captura ] ( lista de argumentos ) { lambda-cuerpo } // Definición común de lambda.
  • [=] ( argument-list ) { lambda-body } // Captura todas las variables locales necesarias por valor.
  • [&] ( argument-list ) { lambda-body } // Captura todas las variables locales necesarias por referencia.
  • [ capture-list ] { lambda-body } // Se pueden omitir la lista de argumentos y los especificadores.

Parámetros

Parámetro Detalles
captura por defecto Especifica cómo se capturan todas las variables no listadas. Puede ser = (captura por valor) o & (captura por referencia). Si se omite, las variables no listadas son inaccesibles dentro del cuerpo lambda . La captura por defecto debe preceder a la lista de captura .
lista de captura Especifica cómo las variables locales se hacen accesibles dentro del cuerpo lambda . Las variables sin prefijo son capturadas por valor. Las variables con el prefijo & son capturadas por referencia. Dentro de un método de clase, this se puede usar para hacer que todos sus miembros sean accesibles por referencia. Las variables no listadas son inaccesibles, a menos que la lista esté precedida por una captura predeterminada .
lista de argumentos Especifica los argumentos de la función lambda.
mudable (Opcional) Normalmente las variables capturadas por valor son const . Especificando mutable hace no const. Los cambios en esas variables se mantienen entre las llamadas.
especificaciones de lanzamiento (opcional) Especifica el comportamiento de lanzamiento de la excepción de la función lambda. Por ejemplo: noexcept o throw(std::exception) .
atributos (Opcional) Cualquier atributo para la función lambda. Por ejemplo, si el lambda-body siempre lanza una excepción, se puede usar [[noreturn]] .
-> tipo de retorno (opcional) Especifica el tipo de retorno de la función lambda. Se requiere cuando el compilador no puede determinar el tipo de retorno.
cuerpo lambda Un bloque de código que contiene la implementación de la función lambda.

Observaciones

C ++ 17 (el borrador actual) introduce constexpr lambdas, básicamente lambdas que pueden evaluarse en tiempo de compilación. Un lambda es automáticamente constexpr si satisface los requisitos de constexpr , pero también puede especificarlo usando la palabra clave constexpr :

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

Lambdas Ejemplos relacionados