Rumah >pembangunan bahagian belakang >C++ >Adakah Kod \'Bahasa Pengaturcaraan C\' Edisi Keempat Menunjukkan Gelagat Yang Ditakrifkan dengan Baik?
Adakah Kod daripada "The C Programming Language" Edisi Ke-4 Mempunyai Gelagat Yang Ditakrifkan dengan Baik?
Kod yang dipersoalkan mempamerkan tingkah laku yang tidak ditentukan, walaupun tidak menggunakan tingkah laku yang tidak ditentukan. Ini disebabkan oleh susunan penilaian sub-ungkapan yang tidak ditentukan, terutamanya mengenai panggilan untuk s.replace().
Prinsip Penilaian Sub-Ungkapan Tidak Ditentukan
Fungsi hujah mempunyai susunan penilaian yang tidak ditentukan, bermakna susunan penilaian hujah fungsi individu tidak boleh diandaikan. Dalam kes ini, hujah untuk s.find() tidak dijamin akan dinilai sebelum atau selepas s.replace().
Impak Susunan Penilaian
Bergantung pada susunan penilaian, keputusan s.find() boleh diubah oleh kesan sampingan s.replace(). Ini kerana s.replace() mengubah suai panjang rentetan, menjejaskan hasil panggilan s.find() berikutnya.
Perbezaan Penilaian Sebenar
Dalam ujian disediakan, dentang menilai s.find("genap") sebelum s.replace(0, 4, ""), manakala gcc menilai mereka berpotensi dalam susunan yang bertentangan. Perbezaan tertib ini membawa kepada hasil yang berbeza dalam panggilan fungsi berantai.
C 17 Changes
Dalam C 17, susunan penilaian untuk ungkapan postfix (seperti panggilan berantai) telah diperkuatkan. Permulaan parameter (termasuk kesan sampingan) dalam hujah fungsi kini dijujukan secara tidak tentu berkenaan dengan parameter lain. Ini memastikan bahawa kod seperti yang dipersoalkan akan mempunyai gelagat yang dinyatakan dengan baik.
Atas ialah kandungan terperinci Adakah Kod \'Bahasa Pengaturcaraan C\' Edisi Keempat Menunjukkan Gelagat Yang Ditakrifkan dengan Baik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!