Koenig は、著書『Accelerated C』の中で、' ' 演算子を使用して文字列を連結する概念を紹介しています。リテラルとオブジェクト。これは簡単そうに見えますが、予期しない結果につながる可能性のある微妙なニュアンスがあります。
次の 2 つの例を考えてみましょう:
<code class="cpp">const string hello = "Hello"; const string message = hello + ",world" + "!";</code>
<code class="cpp">const string exclam = "!"; const string message = "Hello" + ",world" + exclam;</code>
最初の例では、3 つの文字列が正常に連結されています。ただし、2 番目の例は失敗します。
矛盾を理解するには、' ' 演算子の結合性を考慮する必要があります。 ' ' 演算子は左から右の結合です。つまり、左から右に評価されます。これを考慮しないと、予期しない動作が発生する可能性があります。
2 番目の例では、式を次のように括弧で囲むことができます。
<code class="cpp">const string message = ("Hello" + ",world") + exclam;</code>
ご覧のとおり、2 つの文字列リテラル " Hello" と ",world," が最初に連結されます。この結果、文字列リテラルが生成され、これを文字列オブジェクト「exclam」とさらに連結することはできません。
この問題を解決するには、いくつかの方法があります。
<code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
<code class="cpp">const string message = "Hello" + (",world" + exclam);</code>
「 」演算子は、文字列リテラルではなく、文字列オブジェクトを連結するように設計されています。文字列リテラルは文字の配列であり、式で使用すると、その最初の要素へのポインターに変換されます。文字列リテラルを連結する場合のように、2 つのポインターを追加することは、C では許可されていません。
' ' 演算子を使用して文字列リテラルを連結することはできませんが、次のことは可能です。それらを並べて配置して結合します:
<code class="cpp">"Hello" ",world"</code>
これは次と同等です:
<code class="cpp">"Hello,world"</code>
これは、長い文字列リテラルを複数の行に分割する場合に便利です。
以上が\' \' 演算子を使用して文字列リテラルとオブジェクトを安全に連結するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。