Mi chiedevo, perché, in C++, il tipo di ritorno di std::reverse_iterator::operator[]
non è stato specificato. Non dovrebbe essere std::reverse_iterator::reference
?Perché il tipo di ritorno di std :: reverse_iterator :: operator [] non è specificato?
risposta
Questo è in realtà un rilassamento superfluo; A partire da LWG 448 e LWG 299 (oltre N3066), che sono incorporati in C++ 11, i tipi di ritorno degli iteratori di operator[]
devono essere convertiti in reference
. Il problema LWG originale che ha introdotto questa sottodecisione (386) è stato purtroppo risolto prima di quello che ha modificato i requisiti per il tipo restituito di operator[]
.
Dal momento che il tipo di ritorno di iteratori operator[]
viene ora richiesto di essere convertibili in reference
, il tipo di ritorno di reverse_iterator::operator[]
può chiaramente essere solo reference
- ed è, in entrambi i libC++ e libstdC++.
... e anche MSVC. Vuoi presentare un problema LWG? –
@ T.C. Su di essa. :) – Columbo
- 1. Operatore! = È ambiguo per std :: reverse_iterator C++
- 2. Perché non è implementato vector :: operator [] simile a map :: operator []?
- 3. Controlla se il tipo di iteratore è reverse_iterator
- 4. C++: tipo di ritorno di std :: legame con std :: ignorare
- 5. Perché il mio tipo di ritorno è privo di significato?
- 6. Quali sono le carenze di std :: reverse_iterator?
- 7. Perché C++ std :: map :: operator [] non usa inplace new?
- 8. Perché operator ++ restituisce un valore non const?
- 9. Perché unary_function non definisce operator()?
- 10. Perché operator() cambia per std :: function in C++ 17?
- 11. "Il membro è privato" sebbene non acceda dall'esterno, quando si utilizza il tipo di ritorno finale
- 12. Perché type_info :: name() non specificato?
- 13. Perché restituire un riferimento const per un tipo base? (Std :: string :: operator [])
- 14. Perché è necessario chiamare esplicitamente Myclass :: operator string() con std :: string :: operator +()?
- 15. std :: map operator [] - comportamento non definito?
- 16. adattatore reverse_iterator
- 17. Perché è possibile utilizzare operator = ma non operator == con gli inizializzatori di bretelle C++ 11?
- 18. DateTime Tipo non specificato
- 19. Perché std :: equal_to è utile?
- 20. Perché l'operatore std :: unique_ptr * gira e l'operatore-> non lancia?
- 21. Perché questo operatore non usa il tipo di ritorno finale compilato?
- 22. Perché `std :: initializer_list` non è definito come un tipo letterale?
- 23. Swift 2.2: non è possibile convertire il valore di tipo '[B]' al tipo specificato '[A]'
- 24. std :: atomic :: operator ++ restituisce realmente valore?
- 25. Perché non è possibile utilizzare Void come tipo di ritorno per il metodo principale
- 26. Perché il tipo di ritorno del metodo non è incluso nella firma del metodo?
- 27. operatori di confronto gt reverse_iterator mancanti?
- 28. Perché std :: CBEGIN restituiscono lo stesso tipo di std :: iniziano
- 29. qual è il tipo di ritorno dell'operatore di assegnazione?
- 30. Perché è std :: type_info polimorfico?
Vedere LWG 386/2347. – Columbo
@Columbo Potete fornire un collegamento ad esso? – Vincent
Vedere anche LWG 1051. – Columbo