Tôi đã tự hỏi, tại sao, trong C++, kiểu trả về của std::reverse_iterator::operator[]
không được chỉ định. Không phải là std::reverse_iterator::reference
?Tại sao loại trả về của std :: reverse_iterator :: operator [] unspecified?
Trả lời
Đây thực sự là thư giãn không cần thiết; Kể từ LWG 448 và LWG 299 (trên N3066), được kết hợp trong C++ 11, loại trả về của vòng lặp operator[]
sẽ được chuyển đổi thành reference
. Tuy nhiên, vấn đề LWG ban đầu đã giới thiệu sự thiếu xác nhận này (386) đã được giải quyết trước khi một thay đổi yêu cầu về kiểu trả về là operator[]
.
Kể từ khi kiểu trả về của vòng lặp operator[]
bây giờ bắt buộc phải chuyển đổi thành reference
, kiểu trả về của reverse_iterator::operator[]
rõ ràng có thể chỉ reference
- và nó là, trong cả hai libC++ và libstdC++.
... và MSVC. Bạn muốn gửi một vấn đề LWG? –
@ T.C. Trên đó. :) – Columbo
- 1. Tại sao trả lại tham chiếu const cho một loại cơ bản? (Std :: string :: operator [])
- 2. Tại sao std :: operator_ptr operator * throw và operator-> không ném?
- 3. Tại sao std :: vector :: get_allocator() trả về theo giá trị?
- 4. Tại sao không std :: weak_ptr có operator->?
- 5. Tại sao loại của javascript luôn trả về "đối tượng"?
- 6. Loại hàm trả về trả về hàm std :: function
- 7. Tại sao cần gọi một cách rõ ràng chuỗi Myclass :: operator() với std :: string :: operator +()?
- 8. Tại sao std :: vector :: operator [] 5 đến 10 lần nhanh hơn std :: vector :: at()?
- 9. Tại sao IsEqualGUID() và "operator ==" cho GUID được khai báo trả về int?
- 10. Những thiếu sót của std :: reverse_iterator là gì?
- 11. Tại sao không C++ std :: map :: operator [] sử dụng tại chỗ mới?
- 12. Loại nào sẽ khiến "std :: has_unique_object_representations" trả về false?
- 13. 'operator =' là mơ hồ cho std :: string
- 14. Tại sao toán tử ++ trả về giá trị không const?
- 15. std :: getline() trả về
- 16. Tại sao reverse_iterator lại định nghĩa gấp đôi các kiểu lồng nhau của nó?
- 17. Quá tải của toán tử tĩnh so với thành viên: std :: operator << và std :: ostream :: operator <<
- 18. Tại sao std :: count_if trả về giá trị đã ký thay vì chưa ký?
- 19. std :: exception's what() trả về "std :: exception"
- 20. Tại sao is_numeric (NAN) trả về TRUE?
- 21. Tại sao Type.GetElementType trả về null?
- 22. Loại trả về của ứng dụng: didFinishLaunchingWithOptions:
- 23. Clang, std :: shared_ptr và std :: ít/operator <
- 24. Trả về C++ std :: vectơ không có bản sao?
- 25. Tại sao tôi nhận được lỗi khấu trừ loại cho lambda trả về lambda với nhiều đường dẫn trả về?
- 26. Tại sao BeginInvoke không trả về tham chiếu của loại AsyncResult?
- 27. Tại sao reverse_iterator có một hàm tạo mặc định?
- 28. Tại sao gọi std :: string.c_str() trên một hàm trả về một chuỗi không hoạt động?
- 29. Tại sao std :: count trả về một số nguyên đã ký?
- 30. Tại sao "std :: begin()" luôn trả về "const_iterator" trong trường hợp này?
Xem LWG 386/2347. – Columbo
@Columbo Bạn có thể cung cấp liên kết tới nó không? – Vincent
Xem thêm LWG 1051. – Columbo