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>
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>
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>
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>
Verwenden Sie Klammern, um zu erzwingen, dass die zweite Zeichenfolge zuerst ausgewertet wird :
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
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>
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!