Рассмотрим следующий код:
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
Временное не раздражает, но ради любопытства есть ли способ избавиться от него?Что происходит, когда this
дается лямбде?