Rumah >pembangunan bahagian belakang >C++ >Mengapa MSVC Tidak Memberi Amaran Mengenai Perbandingan Kesaksamaan Integer yang Ditandatangani/Tidak Ditandatangani?
Kod berikut menimbulkan persoalan mengapa MSVC tidak mengeluarkan amaran untuk perbandingan kesamaan antara yang ditandatangani (int) dan nilai integer yang tidak ditandatangani (unsigned int):
int a = INT_MAX; unsigned int b = UINT_MAX; bool c = false; if(a == b) // no warning expected here c = true;
Menurut C standard, apabila membandingkan integer yang ditandatangani dan tidak ditandatangani, nilai yang ditandatangani ditukar kepada tidak ditandatangani. Penukaran ini mengekalkan nilai untuk perbandingan kesaksamaan, kerana (-1 == -1) dan ((unsigned)-1 == -1) adalah benar. Walau bagaimanapun, untuk pengendali perbandingan lain seperti lebih besar daripada (>) atau kurang daripada (<), penukaran boleh membawa kepada hasil yang tidak dijangka. Contohnya, (-1 > 2U) menilai kepada benar.
Pembangun MSVC telah membuat pilihan khusus berkenaan tahap amaran untuk pengendali berbeza ini:
Pendekatan ini memastikan amaran dibangkitkan untuk senario di mana penukaran boleh membawa kepada tingkah laku yang mengejutkan, sambil mengelakkan amaran yang tidak perlu untuk perbandingan kesaksamaan yang mengekalkan hasil yang diharapkan.
Atas ialah kandungan terperinci Mengapa MSVC Tidak Memberi Amaran Mengenai Perbandingan Kesaksamaan Integer yang Ditandatangani/Tidak Ditandatangani?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!