tôi thấy rằng phương pháp insert
của std::map
và std::unordered_map
sẽ thay đổi từstd :: thay đổi bản đồ :: chèn trong C++ 17
template<class P> std::pair<iterator,bool> insert(P&& value); (C++11)
để
std::pair<iterator,bool> insert(value_type&& value); (C++17)
Tuy nhiên, đối với những vùng chứa, value_type
là std::pair<A const, int>
. Hai câu hỏi ở đây:
- Tại sao thay đổi này? Nhược điểm là gì?
- Làm cách nào để hoạt động để di chuyển khóa khi chèn? Phiên bản C++ 11 chấp nhận bất cứ điều gì (ràng buộc trên
P
làdefault_constructible<value_type, P&&>
), sau đóstd::pair<A, int>
- phần lớn thời gian là kiểu đối số này vì nó được trả về bởistd::make_pair
- và có thể gọi hàm khởi tạo củaA
. Nhưng trong phiên bản C++ 17, đối số này được đúc thànhvalue_type
, trong đóA
là const, sau đó không thể di chuyển được. A phải được sao chép, nếu tôi không nhìn cái gì đó. Hay C++ 17 thay đổi bất cứ điều gì ở phía đó?
Cảm ơn!
Có vẻ như tính năng đó đã được thêm vào bởi [LWG 2354] (http://wg21.link/lwg2354). –
Nó không phải "từ X đến Y". Đó là một quá tải bổ sung. –