【发布时间】:2014-02-22 05:11:16
【问题描述】:
看起来如果 lambda 在成员函数中定义并且 this 被捕获,那么在 lambda 中所有类成员都可以在不使用 this 关键字的情况下进行访问,我可以这样做
some_class_field = ....
而不是
this->some_class_field = ....
它是可移植的行为还是特定于 Visual Studio?
谢谢。
【问题讨论】:
标签: visual-studio c++11
看起来如果 lambda 在成员函数中定义并且 this 被捕获,那么在 lambda 中所有类成员都可以在不使用 this 关键字的情况下进行访问,我可以这样做
some_class_field = ....
而不是
this->some_class_field = ....
它是可移植的行为还是特定于 Visual Studio?
谢谢。
【问题讨论】:
标签: visual-studio c++11
预计:
§ 5.1.2 第 7 段
lambda 表达式的复合语句产生函数调用运算符的函数体 (8.4), 但出于名称查找 (3.4) 的目的,确定 this (9.3.2) 的类型和值并转换 idexpressions 使用 (*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*
};
}
};
【讨论】: