2017-05-11 53 views
2

对于lambda表达式,默认情况下使用命名捕获与参考之间的区别是什么?默认情况下Lambda捕获参考vs命名为

像这样:

std::vector<int> object; 
std::vector<int> otherObject; 

auto fun = [&](const int& i){ object.push_back(i); }; 

相比:

auto fun = [&object](const int& i){ object.push_back(i); }; 
+0

传递'int'作为const引用没有任何好处。 –

回答

2

http://en.cppreference.com/w/cpp/language/lambda#Explanation

[&]捕获由参考在lambda的主体中使用的所有自动变量如果存在,则通过参考当前对象

只要你的lambda只使用object这两个例子在技术上是等价的。然而,它们的不同之处在于,如果修改lambda表达式以使它们需要额外捕获的对象,则需要手动将它们添加到第二个示例的捕获块中,但不是第一个。

+0

那么,引用的默认值只会处理所有情况下lambda体中使用的变量?因此,与指定案例相比,对性能或其他任何方面都没有缺点? –

+0

@CJ_macar这就是文档指出的。 –