Visual Studio 2013中的C ++ lambda:捕获此指针

时间:2014-02-22 05:11:17

标签: visual-studio c++11

看起来如果在成员函数中定义了lambda并且这个被捕获,那么在lambda内部所有类成员都可以访问而不使用 this 关键字,这是我可以做的

some_class_field = ....

而不是

this->some_class_field = ....

是可移植行为还是特定于Visual Studio?

感谢。

1 个答案:

答案 0 :(得分:2)

预计:

§5.1.2第7段

lambda-expression的复合语句产生函数调用操作符的函数体(8.4), 但出于名称查找(3.4)的目的,确定此类型和值(9.3.2)并转换表达式 使用(* this)(9.3.1)将非静态类成员引用到类成员访问表达式中, 复合语句在lambda表达式的上下文中考虑。 [例如:

struct S1 {
    int x, y;
    int operator()(int);
    void f() {
        [=]()->int {
            return operator()(this->x + y); // equivalent to S1::operator()(this->x + (*this).y)
        // this has type S1*
        };
    }
};