3
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
このようにconst結果を取得するのはいいですか?ローカル変数をλrefからconst refに戻す
const TBigType& a = [](){
TBigType result;
// ...
return result;
}();
use(a); // by const ref
このようにconst結果を取得するのはいいですか?ローカル変数をλrefからconst refに戻す
ラムダはprvalueを返します。したがって、呼び出し式は一時オブジェクトで、その寿命は参照にバインドされているため延長されます。
int f() { return 12; }
const int& a = f();
ここa
はタイプint
と値12
の一時的なオブジェクトにバインドされている:
状況は単純たとえば、次のように完全に似ています。
ラムダの戻り値の型を指定しない場合、戻り値の型は常にvoid
またはオブジェクト型のいずれかです。ラムダが左辺またはxvalueを返すようにするには、戻り値の型を明示的に指定する必要があります。 -> int&
、-> auto&
,-> decltype(auto)
など
ただし、可能な場合は、 'TBigType'に移動コンストラクタを指定する方がよいでしょう。 –
@LightnessRacesinOrbit:Meh。それはとにかくコピーがなくなるでしょう。 –
私は完全に確実であることを好む。 Pre-C++ 17、それは移動コンストラクタです。 –