从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返回一个右值,所以调用表达式是一个临时对象,它的生存期被延长,因为它被绑定到一个引用。
情况完全类似于下面这个更简单的例子:
int f() { return 12; }
const int& a = f();
这里a
被绑定到一个类型为int
,值为12
的临时对象。
如果不指定lambda的返回类型,则返回类型总是void
或对象类型。如果你想让你的lambda返回左值或xvalue,你需要明确地指定返回类型,例如-> int&
, -> auto&
, -> decltype(auto)
等。
相关文章:
- 将 ArrayXd 传递给 const VectorXd& 和 const Ref<const VectorXd>&
- 使用 const char* 初始化 const ref 字符串成员时幕后会发生什么
- const-ref传递的模板化参数是否经过优化,以便在足够小时按值传递
- 正在通过const-ref未定义的行为捕获新构造的对象
- 将文字作为const-ref参数传递
- "move"和"const ref&"如何使双丁吉过载起作用?
- 编译器在 const ref 类型参数上使用临时对象时是否应该警告不安全的行为?
- 为什么在CTOR工作中将温度变量传递到const Ref中
- 使用 const ref 参数进行自赋值的行为
- 是否不允许编译器假设 const-ref 参数将保持 const?
- 如何在不允许临时创建的情况下编写 const ref
- 使用const_cast const-ref getter 实现引用获取器的陷阱
- 重载分辨率:调整 const/ref 是否不比用户定义的转换更好?
- const Ref与RVALUE内部资源结合
- 使用std :: async时,为什么通过const ref速度较慢
- 为什么转换运算符在存在 const-ref 和值时会导致不明确的重载
- 如何避免将const-ref返回缓存中的临时性
- dynamic_cast const ref 到 const ref. cppReference.com 的解释似乎很奇怪
- 为什么"const Eigen::Matrix<>&"和"const Ref<Eigen::Matrix<> >"显然不兼容?
- 为什么我的const-ref无效