Вернуть локальную переменную в const ref из лямбды

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

use(a); // by const ref

Это нормально, чтобы захватить результат в const ref, как это?

1 ответ

Решение

Ваша лямбда-функция возвращает значение, поэтому выражение вызова является временным объектом, срок жизни которого продлен, поскольку он связан со ссылкой.

Ситуация полностью аналогична следующему, более простому примеру:

int f() { return 12; }

const int& a = f();

Вот a привязан к временному объекту типа int и значение 12,

Если вы не укажете тип возврата лямбды, тип возврата всегда void или тип объекта. Если вы хотите, чтобы ваша лямбда возвращала lvalue или xvalue, вам нужно явно указать тип возвращаемого значения, например, как -> int&, -> auto&, -> decltype(auto), так далее.

Другие вопросы по тегам