Dans l'exemple suivant, quelle est la différence entre l'utilisation de [this] dans la liste de capture et l'utilisation de la capture par référence [&] dans la liste de capture, comme indiqué? J'ai essayé les deux et ils produisent la même sortie.Est-ce que [this] et [&] dans un équivalent de liste de capture lambda, lorsqu'il est utilisé dans une classe?
#include <iostream>
class Test {
public:
int x = 2;
void test1(void) { std::cout << "test1" << std::endl; };
void test_lambda(void) {
auto lambda = [&]() {
std::cout << "x: " << x << " y: " << y << " z: " << z << std::endl;
this->test1();
};
lambda();
}
protected:
int y = 3;
private:
int z = 4;
};
int main() {
Test t;
t.test_lambda();
}
Dans le langage C++ de programmation, Stroustrop dit:
Members are always captured by reference. That is, [this] implies that members are accessed through this rather than copied into the lambda.
Cela semble impliquer qu'ils peuvent faire la même chose. Si c'est le cas, pourquoi avons-nous besoin de cela?
& peut être utilisé pour la variable spécifique –
Utilisez toujours la capture la moins puissante que vous pouvez utiliser. Non seulement cela rend le raisonnement local plus facile, mais vous pouvez également éviter une erreur de temps en temps. – KABoissonneault