Return 从 lambda 到 const ref 的局部变量
Return local variable to const ref from lambda
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
像这样在 const ref 中捕获结果可以吗?
你的 lambda return 是一个纯右值,所以调用表达式是一个临时对象,它的生命周期被延长了,因为它绑定到一个引用。
情况完全类似于以下更简单的示例:
int f() { return 12; }
const int& a = f();
此处 a
绑定到类型 int
和值 12
的临时对象。
如果不指定 lambda 的 return 类型,则 return 类型始终是 void
或对象类型。如果您希望您的 lambda 为 return 左值或 xvalue,您将明确需要指定 return 类型,例如如 -> int&
、-> auto&
、-> decltype(auto)
等
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
像这样在 const ref 中捕获结果可以吗?
你的 lambda return 是一个纯右值,所以调用表达式是一个临时对象,它的生命周期被延长了,因为它绑定到一个引用。
情况完全类似于以下更简单的示例:
int f() { return 12; }
const int& a = f();
此处 a
绑定到类型 int
和值 12
的临时对象。
如果不指定 lambda 的 return 类型,则 return 类型始终是 void
或对象类型。如果您希望您的 lambda 为 return 左值或 xvalue,您将明确需要指定 return 类型,例如如 -> int&
、-> auto&
、-> decltype(auto)
等