Tecnicamente Sì, è valido.
Le stringhe hanno una durata di archiviazione statica.
Ma non è tutta la storia.
Queste sono stringhe a C. La convenzione in C-Libraries e funtions è di restituire una stringa allocata dinamicamente che dovrebbe essere liberata. Ad esempio, un puntatore restituito passa implicitamente di nuovo alla proprietà del chiamante (come usuall in C ci sono anche delle eccezioni).
Se non si seguono queste convenzioni confonderai un sacco di esperti sviluppatori C che si aspetterebbero questa convenzione. Se non segui queste aspettative standard allora dovrebbe essere ben documentato nel codice.
Anche questo è C++ (come per i tag). Quindi è più convenzionale restituire una stringa std ::. La ragione di ciò è che il passaggio della proprietà tramite i puntatori è solo implicito (e questo ha comportato un sacco di errori nel codice C se l'aspettativa di cui sopra era stata interrotta ma documentata, sfortunatamente il documento non veniva mai letto dall'utente del codice). Usando una std :: string stai passando un oggetto e la loro non è più una questione di proprietà (il risultato è passato come valore e quindi tuo), ma poiché è un oggetto non ci sono domande o problemi con l'allocazione delle risorse .
Se siete preoccupati per l'efficienza, penso che sia una falsa preoccupazione.
Se si desidera che questo per la stampa tramite i flussi c'è già una convenzione standard per farlo:
std::cout << std::boolalpha << false << std::endl;
std::cout << std::boolalpha << true << std::endl;
fonte
2009-10-19 18:34:20
Sì. Ma in C++ dovresti comunque preferire std :: string. Vedi sotto. –