So che in C++ 98, né std::basic_string<>
né std::vector<>
sono stati richiesti per l'utilizzo dello spazio di archiviazione contiguo. Questo è stato visto come una svista per std::vector<>
non appena è stato segnalato e, se non ricordo male, è stato corretto con C++ 03.std :: string ha bisogno di memorizzare il suo carattere in un pezzo di memoria contigua?
mi sembra di ricordare dopo aver letto su discussioni che richiedono std::basic_string<>
di utilizzare memorizzazione contiguo indietro quando C++ 11 era ancora chiamato C++ 0x, ma non ho seguito la discussione a stretto contatto di allora, e sto ancora limitato al C++ 03 al lavoro, quindi non sono sicuro di cosa ne sia stato.
Quindi è necessario std::basic_string<>
per l'archiviazione contigua? (Se è così, quale versione dello standard richiesto per primo?)
Nel caso in cui ti chiedi: Questo è importante se si dispone di codice passando il risultato di &str[0]
a una funzione in attesa di un pezzo di memoria contiguo di scrivere. (So di str.data()
, ma per ovvie ragioni il vecchio codice non lo usa.)
Bene, dato che 'str.data()' deve essere un tempo costante ed è necessario per restituire un blocco di memoria continua, concluderei che sì. –
Vedi domande simili http://stackoverflow.com/questions/1986966/does-s0-point-to-contiguous-characters-in-a-stdstring e http://stackoverflow.com/questions/2256160/is-it- ragionevole-da-usare-stdbasic-stringt-as-a-contiguous-buffer-when-targeti, che risponde alla domanda ma in un modo che non è banale da leggere. – slaphappy
Quali sono questi ovvi motivi per non usare 'data()'? Quella funzione era presente anche in C++ 03. – Angew