Lambda functions (dal C++11)
![]() | Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate. La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
You can help to correct and verify the translation. Click here for instructions.
[modifica]Sintassi
[ capture] ( params) mutableexceptionattribute-> 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()
la chiusura è dedotto in base alle seguenti regole:operator()
is deduced according to the following rules:You can help to correct and verify the translation. Click here for instructions.
- se il body consiste dichiarazione return singolo, il tipo restituito è il tipo dell'espressione restituito (dopo rvalue-to-lvalue, array a puntatore, o funzione a puntatore conversione implicita)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.
- in caso contrario, il tipo restituito è 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.
[modifica]Spiegazione
mutable | - | body permette di modificare i parametri catturati dalla copia, e di chiamare i loro non-const funzioni membro 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 | - | fornisce il un'eccezione specifica o noexcept clausola per operatore () del tipo di chiusura Original: provides the un'eccezione specifica or the noexcept clausola 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 | - | fornisce il attributo specifica per operatore () del tipo di chiusura Original: provides the attributo specifica 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| specifica quali simboli visibili nel campo di applicazione in cui viene dichiarata la funzione sarà visibile all'interno del corpo della funzione. Un elenco di simboli può essere passato come segue:
A list of symbols can be passed as follows:
|
params | - | L'elenco dei parametri, come in denominato funzioni Original: The list of parameters, as in denominato funzioni The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
ret | - | Tipo restituito. Se non è presente è implicito istruzioni return la funzione (o nulla se non restituisce alcun valore) 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 | - | Funzione del corpo 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 parola chiave mutevole non è stato utilizzato) | |
ret operator()(params){ body } | (la parola chiave è stata utilizzata mutevole) | |
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 copiare costruttori and spostare costruttori.
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 |
[modifica]Esempio
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
[modifica]Vedi anche
specificatore auto | specifica un tipo definito da un (C++11) espressione 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) | avvolge oggetto invocabile di qualsiasi tipo con la firma specificato chiamata di funzione 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. (classe template) |