对于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); };
对于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); };
从http://en.cppreference.com/w/cpp/language/lambda#Explanation:
[&]捕获由参考在lambda的主体中使用的所有自动变量如果存在,则通过参考当前对象
只要你的lambda只使用object
这两个例子在技术上是等价的。然而,它们的不同之处在于,如果修改lambda表达式以使它们需要额外捕获的对象,则需要手动将它们添加到第二个示例的捕获块中,但不是第一个。
那么,引用的默认值只会处理所有情况下lambda体中使用的变量?因此,与指定案例相比,对性能或其他任何方面都没有缺点? –
@CJ_macar这就是文档指出的。 –
传递'int'作为const引用没有任何好处。 –