Я знаю, что обычно не рекомендуется возвращаться с помощью 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);
здесь, или я должен делать, а (ИМО уродливее, но спорно)
bigObject foo() {
bigObject result;
if(use_fixed_ret)
result = fixed_ret;
else{
prepare_object(result);
}
return result;
}