Quiero saber que [=]
hace He aquí un breve ejemplo
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);
¿Cómo funcionaría el código en []
lugar de [=]
?
yo asumo eso
std::function<T (T)>
¿Significa un prototipo de función que obtiene (T)
como argumento y tipo de retorno T
?
Respuestas:
El al
[=]
que te refieres es parte de la lista de captura de la expresión lambda. Esto le dice a C ++ que el código dentro de la expresión lambda se inicializa para que lambda obtenga una copia de todas las variables locales que usa cuando se crea. Esto es necesario para que la expresión lambda pueda referirse afactor
yoffset
, que son variables locales dentro de la función.Si reemplaza el
[=]
con[]
, obtendrá un error de compilación porque el código dentro de la expresión lambda no sabrá cuáles son las variablesoffset
yfactor
se refieren a. Muchos compiladores dan buenos mensajes de error de diagnóstico si hace esto, ¡así que pruébelo y vea qué sucede!fuente
[&]
,[=offset, =input]
etc.Es una lista de captura lambda . Hace que las variables estén disponibles para lambda. Puede utilizar
[=]
qué copias por valor o[&]
qué pasa por referencia.fuente
[]
que no capture nada. :)