Tại sao có std :: move trong cả <Thuật toán> và <tiện ích>


8

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::movetrong<algorithm> thực sự làm những gì tên của nó cho thấy, di chuyển , trong khi std::movetrong<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 movekhi chức năng của mỗi loại khác nhau?



2
Vâng, đáng movelẽ phải được gọi make_rvaluehoặ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::movekhông thực sự di chuyển bất cứ thứ gì.
NathanOliver

Một trong <algorithm>chỉ đơn giản là một trong <utility>áp dụng cho toàn bộ phạm vi.
Rin Kaenbyou

1
@KaenbyouRin Có, nhưng người <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).
Iamanon

1
Hot Take: họ nên đã thực hiện std::movemộ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::movesẽ dài hơn, mà hút.
Brian

Câu trả lời:


7

Vì vậy, nó không phải là khó hiểu cho cả hai được đặt tên di chuyển?

Nó có thể gây nhầm lẫn, đặc biệt là những người không quen với các ngôn ngữ hỗ trợ quá tải. Đúng là các hướng dẫn lập trình thường không khuyến khích quá tải với các ý nghĩa riêng biệt.

Nhưng cũng không khó để biết rằng có hai chức năng cùng tên, mặc dù điều này là chủ quan. Các danh sách đối số khác nhau cung cấp đủ ngữ cảnh để dễ dàng nhận ra cái này từ cái kia.

Tại sao có một std :: di chuyển trong cả hai và

Bởi vì các nhà thiết kế của ngôn ngữ đã chọn sử dụng cùng một tên cho cả hai chức năng.

std::movelà một cách rất súc tích để thể hiện cả hai chức năng. Một trong <algorithm>là bổ sung cho std::copytừ cùng một tiêu đề.

trong khi std :: di chuyển trong đối số của nó thành xvalue, về cơ bản chỉ là một bước tiền xử lý để cuối cùng di chuyển

Mô tả những gì hàm làm không phải là điều duy nhất mà tên của hàm có thể diễn tả. Trong trường hợp này, tên thể hiện ý định của lập trình viên đã sử dụng hàm: Lập trình viên dự định chuyển từ giá trị đối số - nếu có thể.

Đây là điều mà các lập trình viên có thể cần phải viết khá thường xuyên; do đó cần một tên rất ngắn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.