Di solito, questo non è un problema, ma ci sono cose da considerare. Di solito è una questione di cost-correttezza, il che significa tenere traccia di ciò che è possibile modificare e ciò che non si può.
Se si restituisce una stringa con quotatura doppia, è const char *
e trattarla come qualsiasi altra cosa è un invito per problemi. Cambiare una stringa di questo tipo non è un comportamento indefinito, ma in genere causerà il crash del programma o cambierà la stringa a cui è riferita.
Se si restituisce una serie di caratteri nello stack (ad esempio, una variabile locale della funzione chiamata), essa andrà via e il puntatore non punta a nulla in particolare, probabilmente con risultati errati in qualche momento.
Se la funzione chiamata restituisce qualcosa che è già const char *
, la modifica a char *
richiede un cast. Inoltre, se hai intenzione di cambiarlo, devi essere sicuro che sia mutevole. Di solito è molto meglio tenerlo come const char *
.
Non c'è nessun problema immediato con ritorno di memoria allocata con malloc()
o new
, ma si ha il problema della proprietà: quale funzione dovrebbe free()
/delete
, quando, e che cosa fare su eventuali copie? È qui che brillano gli intelligenti puntatori di C++.
fonte
2009-09-14 15:03:18
main() dovrebbe sempre restituire int! http://users.aber.ac.uk/auj/voidmain.shtml – nmuntz