首頁 > 後端開發 > C++ > 為什麼使用字串文字進行字串連線失敗?

為什麼使用字串文字進行字串連線失敗?

Susan Sarandon
發布: 2024-10-24 08:32:30
原創
794 人瀏覽過

Why Did String Concatenation Using   Fail with String Literals?

將字串文字與字串連接

在 C 中,運算子可用於連接字串和字串文字。但是,此功能存在限制,可能會導致混亂。

在問題中,作者嘗試連接字串文字「Hello」、「,world」和「!」以兩種不同的方式。第一個範例:

<code class="cpp">const string hello = "Hello";
const string message = hello + ",world" + "!";</code>
登入後複製

本例中,程式碼編譯並執行成功。這是因為運算子的第一個運算元是字串物件 (hello),因此編譯器將其視為字串和兩個字串文字的串聯。

但是,第二個範例:

<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>
登入後複製

編譯失敗。這是因為最左邊的運算子試圖連接兩個字串文字,這是不允許的。編譯器將此程式碼解釋為:

<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>
登入後複製

第一個串聯嘗試將兩個指標(const char* 文字)加在一起。

要解決此問題,程式碼應該:

  • 將前兩個字串之一連接為一個字串物件:

    <code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
    登入後複製
  • 使用括號強制先計算第二個字串:

    <code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
    登入後複製

無法使用連接兩個字串文字的原因是因為字串文字儲存為字符數組,不能直接將其加在一起。當您在大多數情況下使用字串文字時,它會轉換為指向其初始元素的指針,這對於運算符來說不是有效的操作數。

因此,請務必記住,只有最左邊的兩個運算元之一連接表達式中可以是字串文字。然而,字串文字可以透過將它們彼此相鄰放置來連接,如下所示:

<code class="cpp">"Hello" ",world"
"Hello,world"</code>
登入後複製

以上是為什麼使用字串文字進行字串連線失敗?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板