当lambda捕获“ ​​this”时,是否必须显式使用它?

时间:2019-11-11 15:23:56

标签: c++ lambda this-pointer

我发现在lambda中捕获this的示例明确使用了它;例如:

capturecomplete = [this](){this->calstage1done();};

但是似乎也可以隐式使用它;例如:

capturecomplete = [this](){calstage1done();};

我在g ++中对此进行了测试,并对其进行了编译。

这是标准的C ++吗? (如果可以,是哪个版本),还是某种扩展形式?

2 个答案:

答案 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->