3
const TBigType& a = [](){
    TBigType result;
    // ...
    return result;
}();

use(a); // by const ref

このように const ref で結果を取得しても問題ありませんか?

4

1 に答える 1

5

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

この状況は、次のより単純な例に完全に類似しています。

int f() { return 12; }

const int& a = f();

ここでは、 typeと valueaの一時オブジェクトにバインドされています。int12

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

于 2016-11-10T16:45:44.877 に答える