Estoy leyendo Accelerated C ++ de Koenig. Escribe que "la nueva idea es que podemos usar + para concatenar una cadena y una cadena literal - o, para el caso, dos cadenas (pero no dos cadenas literales).
Bien, supongo que esto tiene sentido. Ahora, en dos ejercicios separados destinados a aclarar esto.
¿Son válidas las siguientes definiciones?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Ahora, intenté ejecutar lo anterior y ¡funcionó! Entonces estaba feliz.
Luego intenté hacer el siguiente ejercicio;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Esto no funcionó. Ahora entiendo que tiene algo que ver con el hecho de que no se pueden concatenar dos cadenas literales, pero no entiendo la diferencia semántica entre por qué logré que el primer ejemplo funcionara (¡no es ", mundo" y "! "¿Dos literales de cadena? ¿No debería haber funcionado esto?) pero no el segundo.
"Hello" + ", world!"
cuando tú puedes hacerlo "Hello, world!"
? Como de costumbre, C ++ tiene una solución sencilla e impresionante para un problema percibido. :-)
"Hello" ", world!"
(sin +
). Hay una serie de quejas que uno podría hacer sobre C ++, pero no creo que su manejo aquí sea una de ellas. Es exactamente lo mismo que si escribiera 1 / 3 + 1.5
y se quejara porque la división era una división integral. Para bien o para mal, esta es la forma en que funcionan la mayoría de los idiomas.
"hello" " world" == "hello world"
es útil si tiene que escribir una cadena larga y no quiere que se salga de su ventana o si quiere estar dentro de alguna restricción de longitud de línea. O si una de las cadenas está definida en una macro.
const string message = "Hello" ",world" + exclam
(por ejemplo, omitiendo el primero+
) debería funcionar bien.