从 Lambda 表达式中返回局部变量的 const 引用

3
const TBigType& a = [](){
    TBigType result;
    // ...
    return result;
}();

use(a); // by const ref

像这样捕获结果到const引用中是否可行?

1个回答

5
您的 lambda 返回一个 prvalue,因此调用表达式是一个临时对象,其生命周期会由于其被绑定到了一个引用而得以延长。
这种情况与以下更简单的示例完全类似:
int f() { return 12; }

const int& a = f();

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

如果您没有指定lambda的返回类型,则返回类型始终为void或对象类型。如果您希望您的lambda返回一个lvalue或xvalue,则需要显式指定返回类型,例如-> int&-> auto&-> decltype(auto)等。


1
如果可能的话,最好给TBigType一个移动构造函数。 - Lightness Races in Orbit
1
@LightnessRacesinOrbit:哎,反正它最后会被复制删除掉。 - Kerrek SB
我更喜欢完全确定。在C++17之前,那是一个移动构造函数。 - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接