Một số thời gian trước đây tôi đã được nói, rằng mô hình thông thường để thực hiện hai nhà khai thác một nhu cầu cuối cùng move
trong sự trở lại.Toán tử C++ 0x T + (const T &, T &&), vẫn cần di chuyển?
Matrix operator+(const Matrix &a, Matrix &&b) {
b += a;
return std::move(b);
}
Nhưng bây giờ có quy tắc đặc biệt mà trong một return
trình biên dịch có thể đối xử với giá trị trả về là một tạm thời, và sau đó điều này sẽ không cần thiết - một đơn giản return b
sẽ đủ.
Nhưng sau đó một lần nữa, b
có tên trong chức năng này, do đó, một vế trái của nó - mà gây cản trở các trình biên dịch để m xem xét nó là một temp, và move
là bắt buộc.
Đây có phải là trường hợp trong phiên bản gần đây nhất của tiêu chuẩn C++ 0x không? Chúng tôi cần move
để triển khai mẫu trên?
Theo [câu trả lời này] (http://stackoverflow.com/questions/6009004/are-value-parameters-implicitly-moved-when -trả lại-by-value/6009012 # 6009012), 'std :: move' là không cần thiết. – fredoverflow
Mặc dù nó có thể tạo sự khác biệt rằng tham số là một 'Ma trận &' thay vì một 'Ma trận' ... – fredoverflow
Nó * là * phức tạp, vâng. Và vâng, tôi nghĩ bạn đúng. Nếu tham số giá trị * của nó * giống như 'Ma trận' thì bạn có một bản sao nguyên sơ cho riêng bạn - một tạm thời. Trình biên dịch biết rằng bạn có thể lấy từ nó. Với 'Ma trận & 'Tôi không * rằng * chắc chắn- – towi