在一个lambda的捕获列表中= =捕获此指针

时间:2017-10-24 08:25:21

标签: c++ c++11 lambda

我目前有类似的东西

void foo::setup()
{
        //this->setSubTitleText("Summary");
        button("ok")->onPress = [=](Mtype*)
        {
            this->bar(this); //Why is the this pointer being recognized here?
        };

}

lambda的capture子句中的=是否允许访问this指针。在我的情况下它是?我的印象是使用this指针,我需要明确地捕获它,如

        button("ok")->onPress = [=,this](Mtype*)
        {
            this->bar(this); //Why is the this pointer being recognized here?
        };

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我认为cppreference.com非常明确地说明了这一点:

  

Lambda捕获

     

捕获是以逗号分隔的零个或多个捕获列表,   可选地以capture-default开头。唯一的捕获   默认值是

     

&安培; (通过引用隐式捕获odr使用的自动变量)   和

     

=(通过复制隐式捕获odr使用的自动变量)。

     

如果捕获,则可以隐式捕获当前对象(* this)   默认存在。如果隐式捕获,则始终捕获它   参考,即使捕获默认值为=。