我应该参考lambda吗?

Nur*_*yev 5 c++ lambda reference value-categories

我应该参考lambda以避免复制吗?

这段代码会复制lambda吗:

auto myLambda = []() {/* do stuff */ }
Run Code Online (Sandbox Code Playgroud)

如果是的话,我应该这样写吗:

auto &myLambda = []() {/* do stuff */ }
Run Code Online (Sandbox Code Playgroud)

PS:很抱歉,有人用谷歌搜索了一个可能是新手的问题,但没有找到答案。

L. *_* F. 3

您应该使用第一个,因为根据 C++ 标准,第二个是格式错误的。

[expr.prim.lambda]/2 :

lambda 表达式是一个纯右值,其结果对象称为闭包对象。[注意:闭包对象的行为类似于函数对象。——尾注 ]

您不能根据[dcl.init.ref]/5将纯右值绑定到左值引用。事实上,特定的编译器似乎接受它并不会改变任何东西。C++ 由 C++ 标准定义。

事实上,自 C++17 以来,第一个保证不会引入副本——保证从纯右值初始化就地构造值。实际上,每个像样的编译器都会进行复制省略优化,因此您可以放心地假设没有进行复制。