2016-04-03 49 views
3

我想知道标准是否允许您通过参考使用=通过所有成员。因此,举例来说,这部作品Lambda参考

int i = 0; 
auto f = [&i]() { 
    i = 1; 
}; 

然而,这并不而且也不把一个&=的后面。

int i = 0; 
auto f = [=]() { 
    i = 1; 
}; 

回答

8

你的意思是:

int i = 0; 
auto f = [&]() { 
    i = 1; 
}; 

[=]捕获由值在lambda体内提到的一切。

[&]通过参考捕捉lambda身体中提及的所有内容。

+0

啊哈!谢谢。 –

1

在该λ表达式

int i = 0; 
auto f = [=]() { 
    i = 1; 
}; 

捕获变量i是拉姆达的数据成员拉姆达内被改变。所以,你必须写

int i = 0; 
auto f = [=]() mutable { 
    i = 1; 
}; 

如果您想通过引用的我会被捕获,你应该写

int i = 0; 
auto f = [=,&i]() { 
    i = 1; 
};