const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
このように const ref で結果を取得しても問題ありませんか?
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
このように const ref で結果を取得しても問題ありませんか?
ラムダは prvalue を返すため、呼び出し式は一時オブジェクトであり、参照にバインドされているため、その有効期間が延長されます。
この状況は、次のより単純な例に完全に類似しています。
int f() { return 12; }
const int& a = f();
ここでは、 typeと valueaの一時オブジェクトにバインドされています。int12
ラムダの戻り値の型を指定しない場合、戻り値の型は常にvoidまたは オブジェクト型です。ラムダで左辺値または x 値を返したい場合は、戻り値の型を明示的に指定する必要があります (例: -> int&、-> auto&、-> decltype(auto)など)。