Giống như câu hỏi nói, tôi tự hỏi lý do cho điều đó. Vì tôi gặp lỗi khi cố gắng lấy khoảng cách giữa các thiết bị lặp không const
và không phải là const
.Tại sao std :: khoảng cách không hoạt động trên sự kết hợp của các biến lặp const và nonconst?
vector<int> v;
auto it=v.begin();
auto cit=v.cbegin();
distance(it,cit);
no matching function for call to ‘distance(__gnu_cxx::__normal_iterator<int*, std::vector<int> >&, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >&)
Từ hiểu biết hạn chế về trình vòng lặp của tôi, tôi không thấy lý do tại sao nó không hoạt động.
hmm tại sao chúng không tạo mẫu với 2 tham số mẫu? Có thể làm điều đó trong cpp core lang? Những gì Im hỏi là một quyết định thiết kế hoặc một giới hạn lang? – NoSenseEtAl
để rõ ràng, tôi biết họ có thể tạo mẫu với 2 tham số mẫu, nhưng Im tự hỏi nó sẽ xung đột với 1 mẫu phiên bản param – NoSenseEtAl
@NoSenseEtAl, tôi sẽ nói quyết định thiết kế. Nó đơn giản hơn theo cách đó và tính toán khoảng cách giữa các trình vòng lặp của các loại khác nhau (nói, một trình vòng lặp truy cập ngẫu nhiên và một trình lặp chuyển tiếp) có lẽ không phải là thứ bạn muốn làm rất thường xuyên. Bạn thực sự có thể viết một phiên bản với hai đối số mẫu, nhưng vấn đề thực tế nào sẽ giải quyết được? –