Yêu cầu vùng chứa đã thay đổi từ C ++ 03 thành C ++ 11. Trong khi C ++ 03 có các yêu cầu chung (ví dụ: khả năng tạo bản sao và khả năng gán cho vectơ), thì C ++ 11 xác định các yêu cầu chi tiết đối với mỗi hoạt động vùng chứa (phần 23.2).
Do đó, bạn có thể ví dụ: lưu trữ một kiểu có thể sao chép-xây dựng nhưng không thể gán được - chẳng hạn như cấu trúc có thành viên const - trong một vectơ miễn là bạn chỉ thực hiện một số hoạt động nhất định không yêu cầu gán (cấu trúc và push_back
các hoạt động đó ; insert
không).
Điều tôi tự hỏi là: điều này có nghĩa là tiêu chuẩn bây giờ cho phép vector<const T>
? Tôi không thấy lý do gì mà nó không nên - const T
, cũng giống như cấu trúc có thành viên const, là một kiểu sao chép có thể xây dựng nhưng không thể gán được - nhưng tôi có thể đã bỏ sót điều gì đó.
(Một phần của điều khiến tôi nghĩ rằng tôi có thể đã bỏ lỡ điều gì đó, đó là thân cây gcc bị sập và cháy nếu bạn cố gắng khởi tạo vector<const T>
, nhưng nó ổn với vector<T>
nơi T có một thành viên const).
address
hàm thành viên được nạp chồng trong bộ cấp phát mặc định: Khi T là const, hai hàm nạp chồng này có cùng một chữ ký. Một cách dễ dàng để sửa lỗi này là chuyên môn hóastd::allocator<const T>
và loại bỏ một trong những điểm quá tải.