【发布时间】:2015-04-19 12:10:41
【问题描述】:
struct CL
{
int i;
void fnc()
{
[&this](){i=1;}; // (1) error
[&](){i=1;}; // (2) ok
}
};
这是第一种情况不起作用,但第二种情况可以。这是为什么呢?
我看到标准 5.1.2/1:
捕获:
标识符
&标识符
这个
(即 &this 不存在)
和 5.1.2/15:
一个实体被隐式或显式引用捕获 捕获但没有被复制捕获
在第二种情况下,“this”不会根据 5.1.2/14 被副本捕获:
如果实体被隐式捕获并且 capture-default 是 = 或者如果它是通过捕获显式捕获的 不包括 &
但是我怎样才能显式地捕获“this”指针呢?还是只能隐式地使用 default-capture & ?
【问题讨论】:
-
最后一行应该回答你的问题。
or if it is explicitly captured with a capture that does not include an &… -
通过引用捕获
this是没有意义的——你不能修改它,或者获取它的地址。如果您愿意,可以通过[this]之类的值显式捕获它。 -
this只能按值捕获。