在lambda中使用`this->`来捕获`this`

时间:2016-07-01 10:14:55

标签: c++ c++11 lambda

有几个类似的问题,但我无法找到这个特定点的明确答案。

在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();
       }
    }
}

2 个答案:

答案 0 :(得分:7)

默认捕获[this]都捕获实例指针,这意味着在lambda中搜索名称也包含类命名空间。因此,如果找到匹配的变量名称,它将引用捕获的实例中的该变量(除非在更近的范围内阴影等)。

所以,是的,在此上下文中使用var等同于this->var的/简写。与在常规实例函数中使用成员名称完全相同!

答案 1 :(得分:0)

你忘了';'在声明lambda之后。

this->var = 1;
this->foo();
// 100% equivalent to?
var = 1;
foo();

是的,它是等价的。