Nel riferimento C++ non vedo un costruttore std::stringstream
che accetta il riferimento di valore di std::string
. C'è qualche altra funzione di supporto per spostare la stringa su stringstream senza un sovraccarico o c'è una ragione particolare dietro a tale limitazione?C'è un modo per std :: move std :: string in std :: stringstream
10
A
risposta
5
non vedo un
std::stringstream
costruttore di accettare di riferimento rvalue distd::string
Proprio così. Anche il setter str
non utilizza la semantica del movimento, quindi lo spostamento di una stringa in stringstream
non è supportato (non nello standard corrente, ma si spera nel prossimo).
+1
Speriamo che ci siano delle brave persone che creano proposte rendere C++ più semplice :) –
Problemi correlati
- 1. std :: stringstream e std :: ios :: binary
- 2. std :: vector :: emplace_back e std :: move
- 3. std :: unique_ptr :: release() vs std :: move()
- 4. Devo preallocare std :: stringstream?
- 5. Differenza tra std: string e std :: string
- 6. Punti decimali con std :: stringstream?
- 7. SWIG: come avvolgere std :: string & (std :: string passato per riferimento)
- 8. Oggetti zombi dopo std :: move
- 9. `std :: move` è necessario qui?
- 10. prestazioni std :: strstr vs. std :: string :: trovare
- 11. Perché std :: move impedisce RVO?
- 12. restituendo std :: string/std :: lista da dll
- 13. std :: vector <std::string> crash
- 14. miscelazione std :: Move() e std :: filo non compilare
- 15. Un compilatore ottimizzante può aggiungere std :: move?
- 16. Perché non è std :: string :: max_size() == std :: string :: allocator :: max_size()
- 17. equivalente strncpy per std :: string?
- 18. Per restituire std :: move (x) o no?
- 19. Riutilizza uno std :: string spostato?
- 20. std :: string o std :: vector per conservare i dati grezzi
- 21. std :: move of string literal - quale compilatore è corretto?
- 22. Dovrebbe essere std :: move drop constness?
- 23. std :: stringstream e il metodo str
- 24. In che modo std :: move() trasferisce i valori in RValues?
- 25. Come acquisire std :: unique_ptr "by move" per un lambda in std :: for_each
- 26. std :: string x (x);
- 27. C++ std :: stringstream operatore << sovraccarico
- 28. Lettura diretta da uno std :: istream in uno std :: string
- 29. std :: string a LPCTSTR
- 30. convertire std :: string in basic_ostream?
Probabilmente perché std :: stringstrream non memorizza i dati come stringa internamente ma all'interno di un buffer di flusso. Quindi ha bisogno di copiare i dati dalla stringa nel buffer delle stringhe. Se avesse usato move semantics, avrebbe dovuto assumere la proprietà del buffer delle stringhe, quindi doveva sapere come è stato allocato (che potrebbe non essere assegnato dinamicamente vedi ottimizzazione della sting breve) e sapere come impostare la stringa su uno stato valido. Quindi consentire la semantica del movimento significa accoppiare strettamente la classe string e la classe stringstream. –
@LokiAstari: "* Quindi consentire semantica di movimento significa accoppiare strettamente la stringa e la classe stringstream. *" Sì, Dio non voglia che due classi della stessa libreria siano accoppiate insieme ... –
@NicolBolas: Accoppiamento di solito significa che ci sono dei compromessi. Forse i progettisti standard non volevano pagare quei compromessi. std :: string è piuttosto cruciale per la maggior parte delle applicazioni C++. Vuoi limitare le ottimizzazioni su di esso solo così questo caso ad angolo è più efficiente? PS Non ho intenzione di difendere la biblioteca di IO che puoi sostenere con il comitato (che è più intelligente di me). Sto solo cercando di fornire una spiegazione ragionevole per la limitazione. –