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

use(a); // by const ref

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

4

1 回答 1

5

您的 lambda 返回一个纯右值,因此调用表达式是一个临时对象,它的生命周期被延长,因为它绑定到一个引用。

这种情况完全类似于以下更简单的示例:

int f() { return 12; }

const int& a = f();

Herea绑定到 typeint和 value的临时对象12

如果不指定 lambda 的返回类型,则返回类型始终为要么void或对象类型。如果您希望您的 lambda 返回左值或 xvalue,则需要明确指定返回类型,例如 as -> int&-> auto&-> decltype(auto)等。

于 2016-11-10T16:45:44.877 回答