有几个类似的问题,但我无法找到这个特定点的明确答案。
在lambda中调用方法或成员变量捕获this->
时,是否完全等同于使用或不使用this
,或者存在一些细微差别?
class C {
int var;
void foo();
void fool() {
auto myLambda = [this] () {
//
this->var = 1;
this->foo();
// 100% equivalent to?
var = 1;
foo();
}
}
}
答案 0 :(得分:7)
默认捕获[this]
都捕获实例指针,这意味着在lambda中搜索名称也包含类命名空间。因此,如果找到匹配的变量名称,它将引用捕获的实例中的该变量(除非在更近的范围内阴影等)。
所以,是的,在此上下文中使用var
等同于this->var
的/简写。与在常规实例函数中使用成员名称完全相同!
答案 1 :(得分:0)
你忘了';'在声明lambda之后。
this->var = 1;
this->foo();
// 100% equivalent to?
var = 1;
foo();
是的,它是等价的。