#include <vector>
#include <algorithm>
void foo(int)
{
}
int main()
{
std::vector<int> v({ 1,2,3 });
std::for_each(v.begin(), v.end(), [](auto it) { foo(it+5); });
}
Quando compilato, l'esempio precedente avvia l'uscita errore come questo:Usando auto in una funzione lambda
h4.cpp: In function 'int main()':
h4.cpp:13:47: error: parameter declared 'auto'
h4.cpp: In lambda function:
h4.cpp:13:59: error: 'it' was not declared in this scope
Vuol dire che la parola chiave auto
non deve essere usato nelle espressioni lambda?
Questo funziona:
std::for_each(v.begin(), v.end(), [](int it) { foo(it+5); });
Perché la versione con la parola chiave auto non funziona?
Penso che anche se è una lambda, esso continuerà a funzionare come una funzione, e deve avere una firma. Con l'auto lascia che il compilatore decida il tipo, quindi il tuo lambda non ha una vera firma fino al momento della compilazione. – Geoffroy
Abbiamo davvero bisogno di lambda polimorfi (modelli impliciti AKA) nello standard successivo. Questa domanda è solo uno dei numerosi casi in cui le persone si limitano a pensare che "auto" funzioni in questo modo. Non vedo ragioni per cui non dovrebbe –
deft_code, sono con te.È un caso logico di utilizzo per l'auto. – Robert