我试图避免在我的函数中使用输出参数。旧的函数是:
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)
的等号赋值是如何工作的?它进行深度复制还是移动?由于 getAllBlockMeanErrorTuple
内部的 fact
、mean
和 err
将被销毁,我希望它是执行移动而不是深度复制。
make_tuple()
中,则它们应该被移动。 - Andystruct Result { vector<int> fact; vector<int> mean; vector<int> err; };
代替元组,以获得更好的getter命名。 - Jarod42