"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment concaténer en toute sécurité des littéraux de chaîne et des objets à l'aide de l'opérateur \'+\' ?

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

Publié le 2024-11-02
Parcourir:813

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 puzzle : deux exemples, un succès, un échec

Considérez les deux exemples suivants :

const string hello = "Hello";
const string message = hello   ",world"   "!";
const string exclam = "!";
const string message = "Hello"   ",world"   exclam;

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 :

const string message = ("Hello"   ",world")   exclam;

Comme vous pouvez le voir, les deux chaînes littérales, "Hello" et ",world", sont concaténées en premier. Cela génère 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 :
const string message = string("Hello")   ",world"   exclam;
  • Parenthèses explicites pour contrôler l'ordre d'évaluation :
const string message = "Hello"   (",world"   exclam);

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 :

"Hello" ",world"

Cela équivaut à :

"Hello,world"

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

Déclaration de sortie Cet article est réimprimé à l'adresse : 1729730169. En cas d'infraction, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3