Gần đây, manyquestionspop up về cách cung cấp chức năng swap
của riêng bạn. Với C++ 11, std::swap
sẽ sử dụng std::move
và di chuyển ngữ nghĩa để hoán đổi các giá trị đã cho càng nhanh càng tốt. Điều này, tất nhiên, chỉ hoạt động nếu bạn cung cấp một hàm tạo di chuyển và một toán tử gán di chuyển (hoặc một toán tử sử dụng giá trị theo giá trị).Di chuyển ngữ nghĩa == chức năng hoán đổi tùy chỉnh lỗi thời?
Bây giờ, với điều đó, bạn có cần viết các hàm swap
của riêng mình trong C++ 11 không? Tôi chỉ có thể nghĩ về các loại không thể di chuyển, nhưng sau đó một lần nữa, tùy chỉnh swap
s thường làm việc thông qua một số loại "trao đổi con trỏ" (aka di chuyển). Có thể với các biến tham chiếu nhất định? Hm ...
Cảm ơn đã cập nhật, Howard. Tôi đoán rằng 'A (const A &) noexcept; 'là một lỗi đánh máy, hoặc có lẽ SO nuốt và không? I E. rằng bạn có nghĩa là 'A (A &&) noexcept; '(và ditto cho opperator gán)? Chúc mừng, –
@Alf: Không; anh ta đang đưa ra một ví dụ trong đó 'std :: swap' sẽ là' noexcept (true) 'ngay cả khi không có việc xây dựng/chuyển nhượng thực tế. –
@ Dennis: Tôi nghĩ rằng tôi cần giải thích thêm sau đó, bởi vì với tôi trông giống như một nhà xây dựng bản sao bình thường (không di chuyển), và một toán tử gán bản sao bình thường, và tôi hiểu nó không liên quan gì đến 'is_nothrow_move_constructible' hoặc' is_nothrow_move_assignable'? –