2016-11-10 10 views

答えて

4

ラムダはprvalueを返します。したがって、呼び出し式は一時オブジェクトで、その寿命は参照にバインドされているため延長されます。

int f() { return 12; } 

const int& a = f(); 

ここaはタイプintと値12の一時的なオブジェクトにバインドされている:

状況は単純たとえば、次のように完全に似ています。

ラムダの戻り値の型を指定しない場合、戻り値の型は常にvoidまたはオブジェクト型のいずれかです。ラムダが左辺またはxvalueを返すようにするには、戻り値の型を明示的に指定する必要があります。 -> int&-> auto&,-> decltype(auto)など

+1

ただし、可能な場合は、 'TBigType'に移動コンストラクタを指定する方がよいでしょう。 –

+1

@LightnessRacesinOrbit:Meh。それはとにかくコピーがなくなるでしょう。 –

+0

私は完全に確実であることを好む。 Pre-C++ 17、それは移動コンストラクタです。 –

関連する問題