連接字串文字:仔細觀察
在C 中,連接運算子" " 可以用於組合字串,但有一定的限制使用字串文字時的限制。讓我們探索這些限制並理解它們背後的語義。
正如 Accelerated C 的引用所暗示的那樣,您不能直接使用「」連接兩個字串文字。這是因為字串文字儲存為字元數組,並且嘗試連接指向此類數組的兩個指標將導致未定義的行為。
考慮以下範例:
<code class="cpp">const string hello = "Hello"; const string message = hello + ",world" + "!"; // Valid</code>
在這種情況下, hello 是一個 const 字串對象,它是最左邊的「」的參數之一。此連接的結果是一個包含“Hello,world”的新字串物件。然後這個新字串與“!”連接起來。產生最終訊息。
但是,在此範例中:
<code class="cpp">const string exclam = "!"; const string message = "Hello" + ",world" + exclam; // Invalid</code>
會出現編譯錯誤,因為「=」運算子具有從左到右的關聯性。這意味著該表達式的括號等效為:
<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>
現在,「Hello」和「,world」都是字串文字,並且由於我們無法直接連接兩個字串文字,因此表達式(“Hello " ",world") 無效。
要解決此問題,我們可以使用括號強制先評估第二個" ":
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
或者,我們可以建立一個來自字串文字之一的字串物件:
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
一般來說,連接的前兩個字串之一必須是std::string 物件。
理解這些語意在以下情況下至關重要:在 C 中使用字串文字。透過遵循這些準則,我們可以有效地連接字串,同時避免與字串文字相關的常見陷阱。
以上是C 中連接字串文字有哪些限制?的詳細內容。更多資訊請關注PHP中文網其他相關文章!