Sto leggendo Accelerated C ++ di Koenig. Scrive che "la nuova idea è che possiamo usare + per concatenare una stringa e una stringa letterale - o, se è per questo, due stringhe (ma non due stringhe letterali).
Bene, questo ha senso suppongo. Ora passiamo a due esercizi separati intesi a chiarire questo.
Le seguenti definizioni sono valide?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Ora, ho provato a eseguire quanto sopra e ha funzionato! Quindi ero felice.
Poi ho provato a fare il prossimo esercizio;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Questo non ha funzionato. Ora capisco che abbia qualcosa a che fare con il fatto che non puoi concatenare due stringhe letterali, ma non capisco la differenza semantica tra il motivo per cui sono riuscito a far funzionare il primo esempio (non è ", world" e "! "due stringhe letterali? Non avrebbe dovuto funzionare?) ma non la seconda.
"Hello" + ", world!"
quando puoi farlo "Hello, world!"
. Come al solito, il C ++ ha una soluzione fantastica e semplice per un problema percepito. :-)
"Hello" ", world!"
(senza il +
). Ci sono una serie di lamentele che si potrebbero fare su C ++, ma non credo che la sua gestione qui sia una di queste. È esattamente la stessa cosa che se scrivessi 1 / 3 + 1.5
e ti lamentassi perché la divisione era una divisione integrale. Nel bene e nel male, questo è il modo in cui funzionano la maggior parte delle lingue.
"hello" " world" == "hello world"
è utile se devi scrivere una stringa lunga e non vuoi che esca dalla tua finestra o se vuoi essere all'interno di una limitazione della lunghezza della riga. O se una delle stringhe è definita in una macro.
const string message = "Hello" ",world" + exclam
(es. omettendo il primo+
) dovrebbe funzionare bene.