Vì vậy, tôi đã xem xét đặc điểm kỹ thuật của std::vector
và nhận thấy rằng reference
typedef đã thay đổi từ Allocator::reference
trong C++ 03 thành value_type&
trong C++ 11. Tôi đã rất ngạc nhiên, vì vậy tôi đã bắt đầu nhìn sâu hơn.Tại sao Allocator :: tham chiếu bị loại bỏ?
Trong C++ 03 §20.1.5 [lib.allocator.requirements] có bảng 32 trong đó X::reference
được định nghĩa là T&
và X::const_reference
được định nghĩa là T const&
.
Tuy nhiên, trong C++ 11 §17.6.3.5 [allocator.requirements] có bảng 28 trong đó thiếu reference
và const_reference
.
Tiếp theo chúng tôi có §20.6.8 std::allocator_traits
được thêm vào trong C++ 11 không bao gồm reference
. Nhưng §20.6.9 std::allocator
.
Cuối cùng, có §23.2.1 [container.requirements.general] mà xác định X::reference
là "vế trái của T
" và X::const_reference
là "giá trị trái const của T
".
Vì vậy, tôi đã tìm kiếm và tìm thấy bài báo này (1, 2) đề xuất xóa reference
khỏi các yêu cầu cấp phát nhưng không đề cập đến bất kỳ lý do nào đằng sau nó. Nhưng cũng có một số LWG issue phản đối thay đổi.
Ngoài ra, tôi đã tìm thấy the interview with Alexander Stepanov trong đó ông nói như thế nào reference
gói gọn bố trí bộ nhớ máy cụ thể và Herb Sutter's post trong đó ông nói về việc con trỏ đến các yếu tố container, yêu cầu container và cách std::vector<bool>
không phải là một container.
Vì vậy, bạn nghĩ gì về tất cả những điều này? Là reference
hữu ích, nó có phục vụ mục đích của nó không? Các tham chiếu "ưa thích" phù hợp với tiêu chuẩn như thế nào? Đây có phải là một động thái táo bạo để loại bỏ hoàn toàn chúng, đưa ra các yêu cầu nghiêm ngặt về thùng chứa hơn và không dùng nữa std::vector<bool>
?
câu hỏi được nghiên cứu độc đáo – David
Không, nó không phải là rất đậm. Tôi sẽ phá vỡ xây dựng nếu ai đó cố gắng để nhanh chóng std :: vector –