Siasatan berkisar tentang amaran yang dihadapi semasa membandingkan ungkapan integer bertanda dan tidak bertanda dalam konteks menentukan pelapik bingkai untuk salam bersempadan asterisk.
Soalan:
Mengapa amaran dikeluarkan apabila membandingkan int dengan rentetan::size_type dalam atur cara yang dikemas kini, manakala kod asal tidak menghadapi masalah?
Jawapan:
Mengisytiharkan pembolehubah sebagai tidak ditandatangani atau rentetan::size_type jika ia akan dibandingkan dengan saiz adalah dinasihatkan untuk mengelakkan amaran sedemikian. Menggunakan jenis yang tepat untuk perbandingan (cth., string::size_type apabila membandingkan dengan panjang rentetan) adalah disyorkan.
Perbandingan Mengejutkan:
Amaran berpunca daripada pelbagai julat integer yang ditandatangani dan tidak ditandatangani, yang membawa kepada keputusan yang tidak dijangka dalam perbandingan. Untuk memastikan kejelasan, tukar satu nilai secara eksplisit kepada jenis yang serasi dengan yang lain sebelum melakukan perbandingan.
Contoh Penukaran:
if (i >= 0) { if ((unsigned)i >= u) iIsGreaterThanOrEqualToU(); else iIsLessThanU(); } else { iIsNegative(); }
Penjelasan Lanjut:
Sama ada isu ini akan ditangani kemudian dalam buku "Accelerated C " tidak disebut secara jelas dalam siasatan asal.
Atas ialah kandungan terperinci Mengapakah membandingkan int dengan rentetan::size_type mencetuskan amaran dalam kod yang dikemas kini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!