Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Penggabungan Rentetan Menggunakan Gagal dengan Literal Rentetan?

Mengapa Penggabungan Rentetan Menggunakan Gagal dengan Literal Rentetan?

Susan Sarandon
Susan Sarandonasal
2024-10-24 08:32:30684semak imbas

Why Did String Concatenation Using   Fail with String Literals?

Menggabungkan Huruf Rentetan dengan Rentetan

Dalam C , pengendali boleh digunakan untuk menggabungkan rentetan dan literal rentetan. Walau bagaimanapun, terdapat pengehadan pada fungsi ini yang boleh menyebabkan kekeliruan.

Dalam soalan itu, pengarang cuba menggabungkan rentetan literal "Hello", ",world", dan "!" dalam dua cara yang berbeza. Contoh pertama:

<code class="cpp">const string hello = "Hello";
const string message = hello + ",world" + "!";</code>

Dalam kes ini, kod disusun dan berjalan dengan jayanya. Ini kerana operan pertama kepada operator ialah objek rentetan (hello), jadi pengkompil menganggap ini sebagai gabungan rentetan dan dua literal rentetan.

Walau bagaimanapun, contoh kedua:

<code class="cpp">const string exclam = "!";
const string message = "Hello" + ",world" + exclam;</code>

gagal disusun. Ini kerana pengendali paling kiri cuba menggabungkan dua literal rentetan, yang tidak dibenarkan. Pengkompil mentafsirkan kod ini sebagai:

<code class="cpp">const string message = (("Hello" + ",world") + exclam);</code>

dan gabungan pertama cuba menambah dua penunjuk (const char* literals) bersama-sama.

Untuk menyelesaikan isu ini, kod tersebut hendaklah sama ada:

  • Jadikan satu daripada dua rentetan pertama yang disatukan sebagai objek rentetan:

    <code class="cpp">const string message = string("Hello") + ",world" + exclam;</code>
  • Gunakan kurungan untuk memaksa yang kedua dinilai dahulu :

    <code class="cpp">const string message = "Hello" + (",world" + exclam);</code>

Sebab anda tidak boleh menggabungkan dua literal rentetan menggunakan adalah kerana literal rentetan disimpan sebagai tatasusunan aksara, yang tidak boleh ditambah secara langsung. Apabila anda menggunakan rentetan literal dalam kebanyakan konteks, ia ditukar kepada penuding kepada elemen awalnya, yang bukan operan yang sah untuk pengendali.

Oleh itu, adalah penting untuk diingat bahawa hanya satu daripada dua operan paling kiri dalam ungkapan gabungan boleh menjadi rentetan literal. Walau bagaimanapun, literal rentetan boleh digabungkan dengan meletakkannya bersebelahan antara satu sama lain, seperti dalam:

<code class="cpp">"Hello" ",world"
"Hello,world"</code>

Atas ialah kandungan terperinci Mengapa Penggabungan Rentetan Menggunakan Gagal dengan Literal Rentetan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn