Concaténation de chaînes littérales : un examen plus approfondi
En C , l'opérateur de concaténation " " peut être utilisé pour combiner des chaînes, mais il existe certains restrictions lorsque vous travaillez avec des chaînes littérales. Explorons ces restrictions et comprenons la sémantique qui les sous-tend.
Comme le suggère la citation d'Accelerated C, vous ne pouvez pas concaténer directement deux chaînes littérales à l'aide de " ". En effet, les chaînes littérales sont stockées sous forme de tableaux de caractères et tenter de concaténer deux pointeurs vers de tels tableaux entraînerait un comportement indéfini.
Considérez l'exemple suivant :
<code class="cpp">const string hello = "Hello"; const string message = hello + ",world" + "!"; // Valid</code>
Dans ce cas, bonjour est un objet chaîne const, qui est l'un des arguments à l'extrême gauche " ". Le résultat de cette concaténation est un nouvel objet chaîne contenant « Hello,world ». Cette nouvelle chaîne est ensuite concaténée avec "!" pour produire le message final.
Cependant, dans cet exemple :
<code class="cpp">const string exclam = "!"; const string message = "Hello" + ",world" + exclam; // Invalid</code>
l'erreur de compilation survient car l'opérateur " =" a une associativité de gauche à droite. Cela signifie que l'équivalent entre parenthèses de l'expression est :
<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>
Maintenant, "Hello" et ",world" sont tous deux des chaînes littérales, et comme nous ne pouvons pas concaténer directement deux chaînes littérales, l'expression ("Bonjour " ",world") n'est pas valide.
Pour résoudre ce problème, nous pouvons forcer le deuxième " " à être évalué en premier en utilisant des parenthèses :
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
Alternativement, nous pouvons créer un objet chaîne à partir de l'un des littéraux de chaîne :
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
En général, l'une des deux premières chaînes concaténées doit être un objet std::string.
Comprendre ces sémantiques est crucial lorsque travailler avec des chaînes littérales en C . En suivant ces directives, nous pouvons concaténer efficacement des chaînes tout en évitant les pièges courants associés aux littéraux de chaîne.
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!