Je veux savoir ce que [=]
fait? Voici un petit exemple
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);
Comment le code fonctionnerait-il au []
lieu de [=]
?
Je suppose que
std::function<T (T)>
signifie un prototype de fonction qui obtient (T)
comme argument et type de retour T
?
Réponses:
Le
[=]
auquel vous faites référence fait partie de la liste de capture de l'expression lambda. Cela indique à C ++ que le code à l'intérieur de l'expression lambda est initialisé afin que le lambda obtienne une copie de toutes les variables locales qu'il utilise lors de sa création. Cela est nécessaire pour que l'expression lambda puisse faire référence àfactor
etoffset
, qui sont des variables locales à l'intérieur de la fonction.Si vous remplacez le
[=]
par[]
, vous obtiendrez une erreur du compilateur car le code à l'intérieur de l'expression lambda ne saura pas à quoi les variablesoffset
etfactor
référencera. De nombreux compilateurs donnent de bons messages d'erreur de diagnostic si vous faites cela, alors essayez-le et voyez ce qui se passe!la source
[&]
,[=offset, =input]
etc.C'est une liste de capture lambda . Rend les variables disponibles pour le lambda. Vous pouvez utiliser les
[=]
copies par valeur ou celles[&]
qui passent par référence.la source
[]
ce qui ne capture rien. :)