Je lis Accelerated C ++ par Koenig. Il écrit que «la nouvelle idée est que nous pouvons utiliser + pour concaténer une chaîne et une chaîne littérale - ou, d'ailleurs, deux chaînes (mais pas deux chaînes littérales).
Bien, cela a du sens, je suppose. Passons maintenant à deux exercices distincts destinés à éclairer cela.
Les définitions suivantes sont-elles valides?
const string hello = "Hello";
const string message = hello + ",world" + "!";
Maintenant, j'ai essayé d'exécuter ce qui précède et cela a fonctionné! Alors j'étais content.
Ensuite, j'ai essayé de faire l'exercice suivant;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Cela n'a pas fonctionné. Maintenant, je comprends que cela a quelque chose à voir avec le fait que vous ne pouvez pas concaténer deux chaînes littérales, mais je ne comprends pas la différence sémantique entre pourquoi j'ai réussi à faire fonctionner le premier exemple (n'est pas ", world" et "! "deux chaînes littérales? Cela n'aurait-il pas dû fonctionner?) mais pas le second.
"Hello" + ", world!"
alors que vous pouvez le faire "Hello, world!"
. Comme d'habitude, C ++ a une solution de contournement impressionnante et simple pour un problème perçu. :-)
"Hello" ", world!"
(sans le +
). Il y a un certain nombre de plaintes que l'on pourrait faire à propos du C ++, mais je ne pense pas que sa gestion ici en soit une. C'est exactement la même chose que si vous écriviez 1 / 3 + 1.5
et que vous vous plaigniez parce que la division était une division intégrale. Pour le meilleur ou pour le pire, c'est ainsi que fonctionnent la plupart des langues.
"hello" " world" == "hello world"
est utile si vous devez écrire une longue chaîne et que vous ne voulez pas qu'elle sorte de votre fenêtre ou que vous voulez être dans une certaine restriction de longueur de ligne. Ou si l'une des chaînes est définie dans une macro.
const string message = "Hello" ",world" + exclam
(par exemple en omettant le premier+
) devrait fonctionner très bien.