Я знаю, что обычно не рекомендуется возвращаться с помощью 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;
}