const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
可以像这样在const ref中捕获结果吗?
答案 0 :(得分:4)
您的lambda返回一个prvalue,因此调用表达式是一个临时对象,其生命周期被扩展,因为它绑定到引用。
这种情况完全类似于以下更简单的例子:
int f() { return 12; }
const int& a = f();
此处a
绑定到int
类型和值12
的临时对象。
如果未指定lambda的返回类型,则返回类型始终为void
或对象类型。如果您希望lambda返回左值或x值,则需要明确指定返回类型,例如:作为-> int&
,-> auto&
,-> decltype(auto)
等