Je suis en train de lire Accelerated C++ de Koenig. Il écrit que "la nouvelle idée est que nous pouvons utiliser + pour concaténer une chaîne et un littéral de chaîne - ou, d'ailleurs, deux chaînes (mais pas deux littéraux de chaîne).
Bien, ça a du sens je suppose. Passons maintenant à deux exercices distincts destinés à éclairer cette question.
Les définitions suivantes sont-elles valables ?
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é ! Donc j'étais content.
Puis j'ai essayé de faire l'exercice suivant ;
const string exclam = "!";
const string message = "Hello" + ",world" + exclam;
Cela n'a pas fonctionné. Je comprends maintenant que cela a quelque chose à voir avec le fait que l'on ne peut pas concaténer deux chaînes littérales, mais je ne comprends pas la différence sémantique entre la raison pour laquelle j'ai réussi à faire fonctionner le premier exemple (est-ce que ",world" et " !" ne sont pas deux chaînes littérales ? Cela n'aurait pas dû ne pas fonctionner ?
4 votes
const string message = "Hello" ",world" + exclam
(par exemple, en omettant le premier+
) devrait fonctionner parfaitement.1 votes
@Joe - Pourquoi quelqu'un voudrait-il écrire
"Hello" + ", world!"
quand vous pouvez faire"Hello, world!"
. Comme d'habitude, C++ propose une solution simple et géniale à un problème perçu :-)2 votes
@Bo La seule chose à laquelle je pense est que si vous utilisez une définition (#define)
0 votes
Même dans ce cas, vous avez plus de chances d'écrire
"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 la façon dont il est traité ici en fasse partie. C'est exactement la même chose que si vous écriviez1 / 3 + 1.5
et s'est plaint 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.0 votes
Je ne suis pas en désaccord. J'ai écrit ça avant de réaliser l'absurdité de ce cas d'utilisation.
4 votes
@Bo Persson En fait, cette fonctionnalité
"hello" " world" == "hello world"
est utile si vous devez écrire une longue chaîne de caractères et que vous ne voulez pas qu'elle sorte de votre fenêtre ou que vous voulez respecter une certaine restriction de longueur de ligne. Ou si l'une des chaînes de caractères est définie dans une macro.