Я пытаюсь избежать выходных аргументов в моих функциях. Старая функция:
void getAllBlockMeanError(
const vector<int> &vec, vector<int> &fact, vector<int> &mean, vector<int> &err)
Здесь vec
- входной аргумент, fact
, mean
и err
- выходной аргумент. Я попытался сгруппировать выходной аргумент в один кортеж:
tuple< vector<int>, vector<int>, vector<int> >
getAllBlockMeanErrorTuple(const vector<int> &vec)
{
vector<int> fact, mean, err;
//....
return make_tuple(fact, mean, err);
}
Теперь я могу вызвать новую функцию с помощью:
tie(fact, mean, err) = getAllBlockMeanErrorTuple(vec);
Это выглядит чище для меня. Хотя у меня есть вопрос, как работает равное присвоение tie(fact, mean, err)
? Делает ли он глубокую копию или движение? Поскольку fact
, mean
и err
внутри getAllBlockMeanErrorTuple
будут уничтожены, я надеюсь, что он делает переход вместо глубокой копии.