C++ - Que fait [ = ]?
Je veux savoir ce que [=]
n'? Voici un court 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 fonctionne avec []
au lieu de [=]
?
std::function<T (T)>
Signifie un prototype de fonction qui obtient (T)
comme argument et type de retour T
?
2 réponses
Le [=]
auquel vous faites référence fait partie de la liste de capture pour 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. Ceci 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 [=]
par []
, vous obtiendrez une erreur de compilateur car le code à l'intérieur du l'expression lambda ne saura pas à quoi se réfèrent les variables offset
et factor
. De nombreux compilateurs donnent de bons messages d'erreur de diagnostic si vous faites cela, alors essayez-le et voyez ce qui se passe!