我发现在lambda中捕获this
的示例明确使用了它;例如:
capturecomplete = [this](){this->calstage1done();};
但是似乎也可以隐式使用它;例如:
capturecomplete = [this](){calstage1done();};
我在g ++中对此进行了测试,并对其进行了编译。
这是标准的C ++吗? (如果可以,是哪个版本),还是某种扩展形式?
答案 0 :(得分:26)
这是标准的,从C ++ 11开始添加lambda以来一直采用这种方式。根据{{3}}:
出于名称查找的目的,请确定名称和类型
this
指针,用于访问非静态类成员的主体 在上下文中考虑闭包类型的函数调用运算符 lambda表达式的值。struct X { int x, y; int operator()(int); void f() { // the context of the following lambda is the member function X::f [=]()->int { return operator()(this->x + y); // X::operator()(this->x + (*this).y) // this has type X* }; } };
答案 1 :(得分:19)
它是completely standard,自从lambdas在C ++ 11中引入以来就已经存在。
您无需在此处写this->
。