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?

78
demandé sur ajay 2016-01-14 01:08:59

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!

99
répondu templatetypedef 2016-01-14 02:26:09

C'est une liste de capture lambda. Rend les variables disponibles pour le lambda. Vous pouvez utiliser [=] copie par valeur, ou [&], qui passe par référence.

33
répondu kometen 2016-01-19 22:15:14