struct CL
{
int i;
void fnc()
{
[&this](){i=1;}; // (1) error
[&](){i=1;}; // (2) ok
}
};
这是第一种不起作用的情况,但第二种情况确实如此。那是为什么?
我看到标准5.1.2 / 1:
捕获:
标识符
&安培;标识符
此
(即& this 不存在)
和5.1.2 / 15:
如果实体是隐式或显式的,则通过引用捕获实体 已捕获但未被副本捕获
在第二种情况下"这"没有按照5.1.2 / 14的副本获取:
如果隐式捕获实体,则通过副本捕获实体 capture-default is = 或者如果使用捕获显式捕获它 不包括&
但我怎样才能抓住这个"这个"指针值显式?或者只能隐含地使用 default-capture & ?
答案 0 :(得分:5)
正式地,[&]
确实通过引用捕获this
,每 5.1.2 / 16 “实体通过引用捕获被隐式或显式捕获但未被复制捕获。“但这没关系,因为
5.1.2 / 18 ...如果捕获
this
,则this
的每次使用都会转换为对相应的未命名数据成员的访问权限。闭包类型,强制转换(5.4)到this
的类型。 [注意:强制转换确保转换后的表达式是一个prvalue。 - 后注]
因此,对于this
,逐个拷贝和按引用捕获是无法区分的。出于所有实际目的,this
总是通过副本捕获。