Lambda functions (desde C++11)
![]() |
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
You can help to correct and verify the translation. Click here for instructions.
[editar] Sintaxis
[ capture ] ( params ) mutable exception attribute -> ret { body }
|
(1) | ||||||||
[ capture ] ( params ) -> ret { body }
|
(2) | ||||||||
[ capture ] ( params ) { body }
|
(3) | ||||||||
[ capture ] { body }
|
(4) | ||||||||
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
operator()
el cierre se deduce de acuerdo con las siguientes reglas:operator()
is deduced according to the following rules:You can help to correct and verify the translation. Click here for instructions.
- si la body consiste en la declaración return único, el tipo de retorno es el tipo de la expresión que se devuelve (después de rvalue-a-valor-i,-matriz de puntero-, o función a puntero conversión implícita)Original:if the body consists of the single return statement, the return type is the type of the returned expression (after rvalue-to-lvalue, array-to-pointer, or function-to-pointer implicit conversion)The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
- de lo contrario, el tipo de retorno es voidOriginal:otherwise, the return type is voidThe text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
()
()
You can help to correct and verify the translation. Click here for instructions.
[editar] Explicación
mutable | - | body permite modificar los parámetros capturados por copia, y que llamen a sus no-const funciones miembro
Original: allows body to modify the parameters captured by copy, and to call their non-const member functions The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
exception | - | proporciona la salvo especificación o la noexcept cláusula para el operador () del tipo de cierre
Original: provides the salvo especificación or the noexcept cláusula for operator() of the closure type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
attribute | - | proporciona la atributo especificado para el operador () del tipo de cierre
Original: provides the atributo especificado for operator() of the closure type The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. {{par | capture |{{tr| especifica los símbolos visibles en el ámbito en el que se declara la función será visible en el interior del cuerpo de la función. Una lista de símbolos se puede pasar como sigue:
A list of symbols can be passed as follows:
|
params | - | La lista de parámetros, como en de funciones con nombre
Original: The list of parameters, as in de funciones con nombre The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
ret | - | Tipo de retorno. Si no está presente lo que está implícito en las declaraciones de función de retorno (o nulo si no devuelve ningún valor)
Original: Return type. If not present it's implied by the function return statements ( or void if it doesn't return any value) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
body | - | Función del cuerpo
Original: Function body The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
You can help to correct and verify the translation. Click here for instructions.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.operator()
You can help to correct and verify the translation. Click here for instructions.
ret operator()(params) const { body } |
(la palabra clave mutable no se utilizó) | |
ret operator()(params) { body } |
(la palabra clave mutable se utilizó) | |
Executes the body of the lambda-expression, when invoked. When accessing a variable, accesses its captured copy (for the entities captured by copy), or the original object (for the entities captured by reference). Unless the keyword mutable was used in the lamda-expression, the objects that were captured by copy are non-modifiable from inside this operator().
Dangling references
If an entity is captured by reference, implicitly or explicitly, and the function call operator of the closure object is invoked after the entity's lifetime has ended, undefined behavior occurs. The C++ closures do not extend the lifetimes of the captured references.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.operator ret(*)(params)
You can help to correct and verify the translation. Click here for instructions.
typedef ret(*F)(params); operator F() const; |
||
This member function is only defined if the capture list of the lambda-expression is empty.
The value returned by this conversion function is a function pointer that, when invoked, has the same effect as invoking the closure object's function call operator directly.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.ClosureType()
You can help to correct and verify the translation. Click here for instructions.
ClosureType() = delete; |
||
ClosureType(const ClosureType& ) = default; |
||
ClosureType(ClosureType&& ) = default; |
||
Closure types are not DefaultConstructible. The copy constructor and the move constructor are implicitly-declared and may be implicitly-defined according to the usual rules for implicit copiar constructores and mover constructores.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.operator=()
You can help to correct and verify the translation. Click here for instructions.
ClosureType& operator=(const ClosureType&) = delete; |
||
Closure types are not CopyAssignable.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.~ClosureType()
You can help to correct and verify the translation. Click here for instructions.
~ClosureType() = default; |
||
The destructor is implicitly-declared.
ClosureType ::Original:ClosureType::The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.CapturedParam
You can help to correct and verify the translation. Click here for instructions.
T1 a; T2 b; |
||
If the lambda-expression captures anything by copy (either implicitly with capture clause [=]
or explicitly with a capture that does not include the character &, e.g. [a, b, c]
), the closure type includes unnamed non-static data members, declared in unspecified order, that hold copies of all entities that were so captured.
The type of each data member is the type of the corresponding captured entity, except if the entity has reference type (in that case, references to functions are captured as-is, and references to objects are captured as copies of the referenced objects).
For the entities that are captured by reference (with the default capture [&]
or when using the character &, e.g. [&a, &b, &c]
), it is unspecified if additional data members are declared in the closure type.
This section is incomplete Reason: scope rules, capture list rules, nested lambdas, implicit capture vs odr use, decltype |
[editar] Ejemplo
You can help to correct and verify the translation. Click here for instructions.
#include <vector> #include <iostream> #include <algorithm> #include <functional> int main() { std::vector<int> c { 1,2,3,4,5,6,7 }; int x = 5; c.erase(std::remove_if(c.begin(), c.end(), [x](int n) { return n < x; } ), c.end()); std::cout << "c: "; for (auto i: c) { std::cout << i << ' '; } std::cout << '\n'; std::function<int (int)> func = [](int i) { return i+4; }; std::cout << "func: " << func(6) << '\n'; }
Output:
c: 5 6 7 func: 10
[editar] Ver también
auto especificador | especifica un tipo definido por una (C++11) expresión
Original: specifies a type defined by an expression (C++11) The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
(C++11) |
envuelve objeto que se puede llamar de cualquier tipo con la firma especificada llamada de función Original: wraps callable object of any type with specified function call signature The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (clase de plantilla) |