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 :) –
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. –