从lambda返回局部变量到const ref

Return local variable to const ref from lambda

本文关键字:const ref 局部变量 lambda 返回      更新时间:2023-10-16
const TBigType& a = [](){
    TBigType result;
    // ...
    return result;
}();
use(a); // by const ref

像这样捕获const ref中的结果是可以的吗?

你的lambda返回一个右值,所以调用表达式是一个临时对象,它的生存期被延长,因为它被绑定到一个引用。

情况完全类似于下面这个更简单的例子:

int f() { return 12; }
const int& a = f();

这里a被绑定到一个类型为int,值为12的临时对象。

如果不指定lambda的返回类型,则返回类型总是void或对象类型。如果你想让你的lambda返回左值或xvalue,你需要明确地指定返回类型,例如-> int&, -> auto&, -> decltype(auto)等。