Eu quero saber o que [=]
faz? Aqui está um pequeno exemplo
template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
return [=] (T input) -> T { return (offset + input) * factor; };
}
auto milesToKm = makeConverter(1.60936, 0.0);
Como o código funcionaria em []
vez de [=]
?
Eu assumo isso
std::function<T (T)>
significa um protótipo de função que obtém (T)
como argumento e tipo de retorno T
?
Respostas:
O que
[=]
você está se referindo faz parte da lista de captura para a expressão lambda. Isso informa ao C ++ que o código dentro da expressão lambda é inicializado para que o lambda obtenha uma cópia de todas as variáveis locais que usa quando é criado. Isso é necessário para que a expressão lambda possa se referir afactor
eoffset
, que são variáveis locais dentro da função.Se você substituir o
[=]
com[]
, você poderá obter um erro do compilador porque o código dentro da expressão lambda não vai saber o que as variáveisoffset
efactor
se referem. Muitos compiladores fornecem boas mensagens de erro de diagnóstico se você fizer isso, então tente e veja o que acontece!fonte
[&]
,[=offset, =input]
etc.É uma lista de captura de lambda . Disponibiliza variáveis para o lambda. Você pode usar
[=]
quais cópias por valor ou[&]
quais passam por referência.fonte
[]
que não captura nada. :)