Estou lendo C ++ acelerado por Koenig. Ele escreve que "a nova idéia é que podemos usar + para concatenar uma string e uma literal de string - ou, nesse caso, duas strings (mas não duas literais).
Tudo bem, isso faz sentido, suponho. Agora, em dois exercícios separados, destinados a esclarecer isso.
As seguintes definições são válidas?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Agora, tentei executar o procedimento acima e funcionou! Então eu fiquei feliz.
Então eu tentei fazer o próximo exercício;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Isso não funcionou. Agora eu entendo que isso tem algo a ver com o fato de que você não pode concatenar dois literais de seqüência de caracteres, mas não entendo a diferença semântica entre o motivo pelo qual consegui fazer o primeiro exemplo funcionar (não é ", mundo" e "! "literais de duas strings? Isso não deveria ter funcionado?), mas não o segundo.
"Hello" + ", world!"
quando você pode fazer "Hello, world!"
. Como de costume, o C ++ tem uma solução simples e impressionante para um problema percebido. :-)
"Hello" ", world!"
(sem o +
). Há uma série de reclamações que se pode fazer sobre C ++, mas não acho que o tratamento aqui seja um deles. É exatamente a mesma coisa que se você escrevesse 1 / 3 + 1.5
, e reclamou porque a divisão era divisão integral. Para o bem ou para o mal, é assim que a maioria dos idiomas funciona.
"hello" " world" == "hello world"
é útil se você precisar escrever uma string longa e não desejar que ela saia da janela ou que esteja dentro de alguma restrição de comprimento de linha. Ou se uma das cadeias for definida em uma macro.
const string message = "Hello" ",world" + exclam
(por exemplo, omitir o primeiro+
) deve funcionar bem.