2016-05-14 15 views
10

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

+5

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

+7

@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 ... –

+0

@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. –

risposta

5

non vedo un std::stringstream costruttore di accettare di riferimento rvalue di std::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