看起来如果在成员函数中定义了lambda并且这个被捕获,那么在lambda内部所有类成员都可以访问而不使用 this 关键字,这是我可以做的
some_class_field = ....
而不是
this->some_class_field = ....
是可移植行为还是特定于Visual Studio?
感谢。
答案 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*
};
}
};