Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapakah membandingkan int dengan rentetan::size_type mencetuskan amaran dalam kod yang dikemas kini?

Mengapakah membandingkan int dengan rentetan::size_type mencetuskan amaran dalam kod yang dikemas kini?

Linda Hamilton
Linda Hamiltonasal
2024-11-07 03:39:02548semak imbas

Why does comparing an int to string::size_type trigger a warning in the updated code?

Perbandingan Antara Ungkapan Integer Bertanda dan Tidak Bertanda: Amaran

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!

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