次の例では、キャプチャリストで[&]というキャプチャを使用するのとは異なり、キャプチャリストで[this]を使用する方法の違いは何ですか?私は両方を試して、同じ出力を生成します。 C++プログラミング言語でラムダキャプチャリストの[this]と[&]は、クラス内で使用されていれば同等ですか?
#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();
}
、Stroustropは言う:
Members are always captured by reference. That is, [this] implies that members are accessed through this rather than copied into the lambda.
これは、彼らが同じことを意味するかもしれないことを示唆しているようです。しかし、それが事実なら、なぜ[これは]必要なのでしょうか?
&特定の変数に使用することができます –
常に使用できる最も強力でないキャプチャを使用してください。ローカルの推論をより簡単にするだけでなく、間違いを避けることもできます。 – KABoissonneault