Hầu hết các lần tôi thấy std::move
được đăng trên đây, nó tham khảo <utility>
phiên bản.
Các std::move
trong<algorithm>
thực sự làm những gì tên của nó cho thấy, di chuyển , trong khi std::move
trong<utility>
phôi đối số của nó đến một Xvalue, mà về cơ bản chỉ là một bước tiền xử lý cho cuối cùng di chuyển Xvalue vào một giá trị trái. Vì vậy, không có gì khó hiểu khi cả hai được đặt tên move
khi chức năng của mỗi loại khác nhau?
move
lẽ phải được gọi make_rvalue
hoặc một cái gì đó dọc theo những dòng đó. Thật khó chịu khi giải thích hết lần này đến lần khác rằng tham số đơn lẻ std::move
không thực sự di chuyển bất cứ thứ gì.
<algorithm>
chỉ đơn giản là một trong <utility>
áp dụng cho toàn bộ phạm vi.
<algorithm>
thực sự thực hiện di chuyển (giả sử rằng có một toán tử gán chuyển động được xác định cho loại chúng ta đang di chuyển).
std::move
một toán tử thay vì một chức năng thư viện. Bất kỳ tên nào tốt hơn std::move
sẽ dài hơn, mà hút.