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

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
Libérer: 2024-10-24 08:40:02
original
267 Les gens l'ont consulté

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>
Copier après la connexion
<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>
Copier après la connexion

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

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>
Copier après la connexion
  • Parenthèses explicites pour contrôler Ordre d'évaluation :
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
Copier après la connexion

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

Cela équivaut à :

<code class="cpp">"Hello,world"</code>
Copier après la connexion

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!

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!