Maison >développement back-end >C++ >Lors de la concaténation de littéraux de chaîne avec \' \' en C, pourquoi ne peuvent-ils pas être directement joints ?
Concaténation de chaînes littérales
En Accelerated C , Koenig introduit la possibilité de concaténer des chaînes à l'aide de l'opérateur " ". Bien que cela fonctionne avec une combinaison de chaînes et de littéraux de chaîne, cela soulève des questions lorsque l'on tente de concaténer plusieurs littéraux de chaîne.
Comprendre le problème
Considérons l'exemple suivant :
const string hello = "Hello"; const string message = hello + ",world" + "!";
Ce code s'exécute avec succès, malgré la présence de ",world" et "!" sous forme de chaînes littérales. Cependant, une tentative similaire échoue avec ce qui suit :
const string exclam = "!"; const string message = "Hello" + ",world" + exclam;
Le facteur d'associativité
La différence réside dans l'associativité de l'opérateur " ". Il s'évalue de gauche à droite, ce qui signifie :
(hello + ",world") + "!"
Dans le premier cas, "hello" est concaténé avec ",world", ce qui donne un objet chaîne. Cet objet est ensuite concaténé avec "!".
Dans le second cas, "Hello" et ",world" ne peuvent pas être directement concaténés en raison de la restriction interdisant la concaténation de deux chaînes littérales. Cela entraîne une erreur du compilateur.
Solutions possibles
Pour résoudre le problème, on peut soit s'assurer que les deux premiers opérandes de " " sont des objets chaîne, soit forcer le ordre d'évaluation à l'aide de parenthèses :
Option 1 : Objet chaîne comme premier opérande
const string message = string("Hello") + ",world" + exclam;
Option 2 : Parenthèses
const string message = "Hello" + (",world" + exclam);
Pourquoi les littéraux de chaîne ne peuvent pas être concaténés directement
Les littéraux de chaîne sont des tableaux de caractères et, lorsqu'ils sont utilisés dans une expression, ils se convertissent en pointeurs vers leurs éléments initiaux. Tenter d'ajouter deux littéraux de chaîne équivaut à ajouter deux pointeurs, ce qui n'est pas valide.
Alternative pour concaténer des littéraux de chaîne
Les littéraux de chaîne peuvent être concaténés simplement en les plaçant adjacents les uns aux autres :
"Hello" ",world"
Cela équivaut à :
"Hello,world"
Cependant, cette approche ne fonctionne qu'avec des chaînes littérales et non avec des objets chaîne ou des tableaux de caractères.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!