Maison > développement back-end > C++ > le corps du texte

Lors de la concaténation de littéraux de chaîne avec \' \' en C, pourquoi ne peuvent-ils pas être directement joints ?

Susan Sarandon
Libérer: 2024-10-24 08:45:02
original
261 Les gens l'ont consulté

When Concatenating String Literals with

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" + "!";
Copier après la connexion

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;
Copier après la connexion

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") + "!"
Copier après la connexion

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;
Copier après la connexion

Option 2 : Parenthèses

const string message = "Hello" + (",world" + exclam);
Copier après la connexion

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"
Copier après la connexion

Cela équivaut à :

"Hello,world"
Copier après la connexion

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!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!