2016-11-10 62 views

回答

4

您的lambda返回一個prvalue,所以調用表達式是一個臨時對象,它的生存期由於綁定到引用而延長。

的情況是完全類似於下文中,更簡單的例子:

int f() { return 12; } 

const int& a = f(); 

這裏a勢必int類型和值12的臨時對象。

如果您未指定lambda的返回類型,則返回類型始終爲void或對象類型。如果您希望您的lambda返回左值或xvalue,則您將顯式指定返回類型,例如如-> int&,-> auto&,-> decltype(auto)

+1

但是如果可能的話給'TBigType'移動構造函數會更好。 –

+1

@LightnessRacesinOrbit:Meh。無論如何,它將被複制無效。 –

+0

我寧願完全確定。 Pre-C++ 17,這是一個移動構造函數。 –