Tôi đang cố tránh các đối số đầu ra trong các chức năng của mình. Chức năng cũ là:Chức năng trả về một bộ dữ liệu làm bằng vectơ
void getAllBlockMeanError(
const vector<int> &vec, vector<int> &fact, vector<int> &mean, vector<int> &err)
Đây vec
được tranh luận đầu vào, fact
, mean
và err
là tranh luận đầu ra. Tôi cố gắng để tranh luận đầu ra nhóm để một tuple:
tuple< vector<int>, vector<int>, vector<int> >
getAllBlockMeanErrorTuple(const vector<int> &vec)
{
vector<int> fact, mean, err;
//....
return make_tuple(fact, mean, err);
}
Bây giờ tôi có thể gọi hàm mới với:
tie(fact, mean, err) = getAllBlockMeanErrorTuple(vec);
Có vẻ sạch hơn đối với tôi. Trong khi tôi có câu hỏi, việc phân công ngang nhau của tie(fact, mean, err)
hoạt động như thế nào? Liệu nó làm một bản sao sâu hoặc di chuyển? Vì fact
, mean
và err
bên trong getAllBlockMeanErrorTuple
sẽ bị hủy, tôi hy vọng nó đang di chuyển thay vì bản sao sâu.
Tôi không tích cực, nhưng tôi nghĩ là viết nó sẽ sao chép các vectơ. Nếu bạn di chuyển vectơ vào 'make_tuple()', thì chúng sẽ được di chuyển. – Andy
Tôi sẽ sử dụng kết quả 'struct Result {vector; vector có nghĩa là; vector err; }; 'thay vì tuple để có tên tốt hơn cho getter. –
Jarod42