Я понимаю, что правильный способ захвата 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.