Xét đoạn mã sau:Tại sao tôi không chụp được con trỏ "này" bởi một lambda?
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() {}
};
Trong VC2010, sử dụng this
thay vì a
dẫn đến lỗi biên dịch. Trong số những người khác:
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
Điều tôi không hiểu. Nó có nghĩa là nó không biết nếu nó nên sử dụng một tài liệu tham khảo hoặc sao chép nó? Khi cố gắng sử dụng &this
để buộc tham khảo, nó cũng nói:
1>main.cpp(20): error C3496: 'this' is always captured by value: '&' ignored
Các tạm thời mà không phải là khó chịu, nhưng vì lợi ích của sự tò mò, là có một cách để thoát khỏi nó? Điều gì xảy ra khi this
được trao cho một lambda?
Hoạt động tốt trong GCC 4.6.1, ngay cả với '[this]'. –
@KerrekSB Tốt để biết ... Cảm ơn bạn đã kiểm tra! – Gabriel
Điều này trông giống như [bug # 560907] (https://connect.microsoft.com/VisualStudio/feedback/details/560907/capturing-variables-in-nested-lambdas) (được đóng là 'WONTFIX', thật không may). –