「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > \'+\' 演算子を使用して文字列リテラルとオブジェクトを安全に連結するにはどうすればよいですか?

\'+\' 演算子を使用して文字列リテラルとオブジェクトを安全に連結するにはどうすればよいですか?

2024 年 11 月 2 日に公開
ブラウズ:750

How Can You Safely Concatenate String Literals and Objects Using the \' \' Operator?

文字列リテラルとオブジェクトの連結: ' ' 演算子の探索

Koenig は、著書『Accelerated C』の中で、' ' 演算子を使用して文字列を連結する概念を紹介しています。リテラルとオブジェクト。これは簡単そうに見えますが、予期せぬ結果につながる可能性のある微妙なニュアンスがあります。

パズル: 2 つの例、1 つは成功、1 つは失敗

次の 2 つの例を考えてみましょう:

const string hello = "Hello";
const string message = hello   ",world"   "!";
const string exclam = "!";
const string message = "Hello"   ",world"   exclam;

最初の例では、3 つの文字列が正常に連結されています。ただし、2 番目の例は失敗します。

エラーの理解: 演算子の結合性と左から右の評価

矛盾を理解するには、' ' 演算子の結合性を考慮する必要があります。 ' ' 演算子は左から右の結合であり、左から右に評価されることを意味します。これを考慮しないと、予期しない動作が発生する可能性があります。

2 番目の例では、式を次のように括弧で囲むことができます。

const string message = ("Hello"   ",world")   exclam;

ご覧のとおり、2 つの文字列リテラル、「Hello」と「,world」が最初に連結されます。この結果、文字列リテラルが生成され、これを文字列オブジェクト "exclam" とさらに連結することはできません。

解決策: ' ' 演算子の動作に対処する

この問題を解決するには、いくつかの方法があります。

  • std::string オブジェクトを次のいずれかとして使用する引数:
const string message = string("Hello")   ",world"   exclam;
  • 評価を制御するための明示的な括弧順序:
const string message = "Hello"   (",world"   exclam);

2 つの文字列リテラルを連結できないのはなぜですか?

「 」演算子は、文字列リテラルではなく、文字列オブジェクトを連結するように設計されています。文字列リテラルは文字の配列であり、式で使用すると、その最初の要素へのポインターに変換されます。文字列リテラルを連結する場合のように、2 つのポインターを追加することは、C では許可されていません。

Juxtaposition による文字列リテラルの連結

' ' 演算子を使用して文字列リテラルを連結することはできませんが、次のことはできます。並べて配置して結合します:

"Hello" ",world"

これは次と同等です:

"Hello,world"

これは、長い文字列リテラルを複数の行に分割する場合に便利です。

]
リリースステートメント この記事は次の場所に転載されています: 1729730169 権利侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3