Maison  >  Article  >  développement back-end  >  Comment pouvez-vous concaténer en toute sécurité des littéraux de chaîne et des objets à l'aide de l'opérateur \' \' ?

Comment pouvez-vous concaténer en toute sécurité des littéraux de chaîne et des objets à l'aide de l'opérateur \' \' ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-24 08:40:02268parcourir

How Can You Safely Concatenate String Literals and Objects Using the ' ' Operator?

Concaténation de littéraux et d'objets de chaîne : exploration de l'opérateur ' '

Dans son livre "Accelerated C", Koenig introduit le concept d'utilisation de l'opérateur ' " pour concaténer une chaîne littéraux et objets. Bien que cela puisse paraître simple, il existe des nuances subtiles qui peuvent conduire à des résultats inattendus.

Le casse-tête : deux exemples, un succès, un échec

Considérez les deux exemples suivants :

<code class="cpp">const string hello = "Hello";
const string message = hello + ",world" + "!";</code>
<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>

Le premier exemple concatène avec succès les trois chaînes. Cependant, le deuxième exemple échoue.

Comprendre l'erreur : associativité de l'opérateur et évaluation de gauche à droite

Pour comprendre l'écart, nous devons considérer l'associativité de l'opérateur " ". L'opérateur « » est associatif de gauche à droite, ce qui signifie qu'il évalue de gauche à droite. Cela peut conduire à un comportement inattendu s'il n'est pas pris en compte.

Dans le deuxième exemple, l'expression peut être mise entre parenthèses comme :

<code class="cpp">const string message = ("Hello" + ",world") + exclam;</code>

Comme vous pouvez le voir, les deux chaînes littérales, " Bonjour" et ", monde" sont concaténés en premier. Il en résulte une chaîne littérale, qui ne peut pas être davantage concaténée avec l'objet chaîne "exclam".

Solutions : gérer le comportement de l'opérateur ' '

Il existe plusieurs façons de résoudre ce problème :

  • Utilisation d'un objet std::string comme l'un des arguments :
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
  • Parenthèses explicites pour contrôler Ordre d'évaluation :
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>

Pourquoi ne pouvez-vous pas concaténer deux littéraux de chaîne ?

L'opérateur ' ' est conçu pour concaténer des objets de chaîne, pas des littéraux de chaîne. Une chaîne littérale est un tableau de caractères et, lorsqu'elle est utilisée dans une expression, elle est convertie en pointeur vers son élément initial. L'ajout de deux pointeurs, comme dans le cas de la concaténation de littéraux de chaîne, n'est pas autorisé en C .

Concaténation de littéraux de chaîne par juxtaposition

Bien que vous ne puissiez pas concaténer des littéraux de chaîne à l'aide de l'opérateur ' , vous pouvez combinez-les en les plaçant côte à côte :

<code class="cpp">"Hello" ",world"</code>

Cela équivaut à :

<code class="cpp">"Hello,world"</code>

Ceci est utile pour diviser de longues chaînes littérales sur plusieurs lignes.

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!

Déclaration:
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