this람다에서 캡처 (개체 속성 수정) 하는 올바른 방법 은 다음과 같습니다.
auto f = [this] () { /* ... */ };
그러나 나는 내가 본 다음과 같은 특징이 궁금합니다.
class C {
public:
void foo() {
// auto f = [] () { // this not captured
auto f = [&] () { // why does this work?
// auto f = [&this] () { // Expected ',' before 'this'
// auto f = [this] () { // works as expected
x = 5;
};
f();
}
private:
int x;
};
내가 혼란스럽고 대답하고 싶은 이상한 점은 다음과 같은 이유입니다.
auto f = [&] () { /* ... */ }; // capture everything by reference
그리고 내가 this참조로 명시 적으로 캡처 할 수없는 이유 :
auto f = [&this] () { /* ... */ }; // a compiler error as seen above.
this변경할 수 없습니다, 더 빨리 참조를 만들기 위해 큰 충분하지 않습니다 ... 그리고 어쨌든 , 실제로 존재하지 않는 이있다, 그래서 실제 수명이 없습니다. 즉, 그에 대한 참조는 정의에 따라 달라집니다.thislvalue가 아니라 prvalue입니다.