web-dev-qa-db-fra.com

Que signifie [=] en C ++?

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?

88
der_lord

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!

102
templatetypedef

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.

40
kometen