Рассмотрим следующий код:
class A
{
public:
void foo()
{
auto functor = [this]()
{
A * a = this;
auto functor = [a]() // The compiler won't accept "this" instead of "a"
{
a->bar();
};
};
}
void bar() {}
};
В VC2010 использование this
вместо a
приводит к ошибкам компиляции . Среди прочего:
1>main.cpp(20): error C3480: '`anonymous-namespace'::<lambda0>::__this': a lambda capture variable must be from an enclosing function scope
1>main.cpp(22): error C3493: 'this' cannot be implicitly captured because no default capture mode has been specified
Чего я не понимаю. Означает ли это, что он не знает, следует ли использовать ссылку или копировать ее? При попытке использовать & this
для принудительной ссылки, он также говорит:
1>main.cpp(20): error C3496: 'this' is always captured by value: '&' ignored
Временное не так раздражает, но ради любопытства, есть ли способ избавиться от него? Что происходит, когда этот
передается лямбда?