In 11 array
, dynarray
, string
e vector
tutti avuto il metodo C++ data
cui:Perché non std :: string.data() fornisce un carattere mutabile *?
ritorni puntatore alla matrice sottostante che funge da elemento di memorizzazione. Il puntatore è tale che l'intervallo [
data()
;data() + size()
) è sempre un intervallo valido, anche se il contenitore è vuoto. [Source]
Questo metodo è fornito in un mutevole e const
versione per tutti i contenitori applicabili, ad esempio:
T* vector<T>::data();
const T* vector<T>::data() const;
Tutti i contenitori applicabili, cioè, tranne string
che only provides the const
version:
const char* string::data() const;
Che cosa è successo qui? Perché lo string
si è trasformato in shortchanged, quando char* string::data()
sarebbe stato così utile?
È stato discusso ed è registrato come un problema, dettagli [qui] (http://cplusplus.github.io/LWG/lwg-active.html#2391). – Alper
Fa: '& s [0]', per stringhe non vuote. –
Penso che se hai bisogno di modificare la stringa tramite 'data', probabilmente stai cercando' vector ', invece. Ci sono alcune eccezioni, però. –
edmz