Heim > Backend-Entwicklung > C++ > Warum ist die String-Verkettung mit String-Literalen fehlgeschlagen?

Warum ist die String-Verkettung mit String-Literalen fehlgeschlagen?

Susan Sarandon
Freigeben: 2024-10-24 08:32:30
Original
779 Leute haben es durchsucht

Why Did String Concatenation Using   Fail with String Literals?

String-Literale mit Strings verketten

In C kann der Operator zum Verketten von Strings und String-Literalen verwendet werden. Es gibt jedoch Einschränkungen dieser Funktionalität, die zu Verwirrung führen können.

In der Frage versucht der Autor, die Zeichenfolgenliterale „Hello“, „,world“ und „!“ zu verketten. auf zwei verschiedene Arten. Das erste Beispiel:

<code class="cpp">const string hello = "Hello";
const string message = hello + ",world" + "!";</code>
Nach dem Login kopieren

In diesem Fall wird der Code erfolgreich kompiliert und ausgeführt. Dies liegt daran, dass der erste Operand des Operators ein String-Objekt (Hallo) ist, sodass der Compiler dies als Verkettung eines Strings und zweier String-Literale behandelt.

Das zweite Beispiel jedoch:

<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>
Nach dem Login kopieren

Kompilierung schlägt fehl. Dies liegt daran, dass der Operator ganz links versucht, zwei Zeichenfolgenliterale zu verketten, was nicht zulässig ist. Der Compiler interpretiert diesen Code wie folgt:

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

und die erste Verkettung versucht, zwei Zeiger (const char*-Literale) zusammenzufügen.

Um dieses Problem zu beheben, sollte der Code entweder:

  • Machen Sie eine der ersten beiden Zeichenfolgen, die verkettet werden, zu einem Zeichenfolgenobjekt:

    <code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
    Nach dem Login kopieren
  • Verwenden Sie Klammern, um zu erzwingen, dass die zweite Zeichenfolge zuerst ausgewertet wird :

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

Der Grund dafür, dass Sie zwei String-Literale nicht verketten können, liegt darin, dass String-Literale als Arrays von Zeichen gespeichert werden, die nicht direkt addiert werden können. Wenn Sie in den meisten Kontexten ein Zeichenfolgenliteral verwenden, wird es in einen Zeiger auf sein Anfangselement umgewandelt, das kein gültiger Operand für den Operator ist.

Daher ist es wichtig, sich daran zu erinnern, dass nur einer der beiden ganz linken Operanden in einem Verkettungsausdruck kann ein String-Literal sein. String-Literale können jedoch verkettet werden, indem man sie nebeneinander platziert, wie in:

<code class="cpp">"Hello" ",world"
"Hello,world"</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum ist die String-Verkettung mit String-Literalen fehlgeschlagen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage