Я знаю, что обычно не стоит возвращаться с std::move
, то есть
bigObject foo() { bigObject result; /*...*/ return std::move(result); }
вместо простого
bigObject foo() { bigObject result; /*...*/ return result; }
, потому что это мешаетоптимизация возвращаемого значения.Но что в случае функции с несколькими различными значениями возврата, в частности, что-то вроде
class bar {
bigObject fixed_ret;
bool use_fixed_ret;
void prepare_object(bigObject&);
public:
bigObject foo() {
if(use_fixed_ret)
return fixed_ret;
else{
bigObject result;
prepare_object(result);
return result;
}
}
};
Я думаю, что нормальная оптимизация возвращаемого значения невозможна в такой функции, поэтому было бы неплохо добавить
return std::move(result);
1013 * здесь, или я должен делать, а (IMO уродливее, но это спорный вопрос) 1015 *