似乎我可以在类作用域中定义捕获this
的lambda表达式。根据我阅读的最新草案N4640,我没有找到允许这种行为的句子。我认为我可能漏掉了什么...
以下是一个示例:
#include <iostream>
#include <functional>
struct foo {
std::function<void()> f1 = [this]{ ++i; };
int i = 0;
};
int main() {
foo a;
foo const& cref = a;
cref.f1();
std::cout << a.i << std::endl;
}
运行演示。(g++ -std=c++11 pedantic) https://wandbox.org/permlink/HPzaOxbBkOQOmuS6
更新
感谢@Brian和@cpplerner的评论,我理解了我的核心问题。那就是“关键字this
是否允许在类作用域中使用?不仅限于非静态成员函数作用域。”
如果可以,我可以在类作用域中的lambda表达式捕获列表中使用this
。这很清楚。
似乎在类作用域中,this
被视为非常量指针。
为了解决我的核心问题,我阅读了N4640 9.2.2.1 The this pointer [class.this]。从语法上讲,它似乎是允许的,但我找不到语义描述。对于非静态成员函数,我在9.2.2/3和9.2.2/4找到了语义描述。
更新
我更新了问题的标题以表示我的核心问题。
原始问题标题为在类作用域中,lambda表达式能否捕获this?
this
只能在非静态成员函数中使用。但是看起来我错了。我写了另一个例子。https://wandbox.org/permlink/CUiG2KIOgD6q9qFy - Takatoshi Kondo