Je veux savoir quoi [=]
Est-ce que? 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 avec []
au lieu de [=]
?
Je suppose que
std::function<T (T)>
signifie un prototype de fonction qui obtient (T)
en tant qu'argument et type de retour T
?
Le [=]
vous faites référence à fait partie de liste de capture pour l'expression lambda. Cela indique à C++ que le code contenu dans 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
et offset
, qui sont des variables locales à l'intérieur de la fonction.
Si vous remplacez le [=]
avec []
, vous obtiendrez une erreur de compilation parce que le code dans l'expression lambda ne saura pas à quoi les variables offset
et factor
font référence. De nombreux compilateurs donnent de bons messages d'erreur de diagnostic si vous le faites, essayez-le et voyez ce qui se passe!
C'est une liste de capture lambda . Rend les variables disponibles pour le lambda. Vous pouvez utiliser [=]
qui copie par valeur, ou [&]
qui passe par référence.