Rumah > pembangunan bahagian belakang > C++ > Mengapa MSVC Tidak Memberi Amaran Mengenai Perbandingan Kesaksamaan Integer yang Ditandatangani/Tidak Ditandatangani?

Mengapa MSVC Tidak Memberi Amaran Mengenai Perbandingan Kesaksamaan Integer yang Ditandatangani/Tidak Ditandatangani?

Mary-Kate Olsen
Lepaskan: 2024-12-23 07:18:21
asal
690 orang telah melayarinya

Why Doesn't MSVC Warn About Signed/Unsigned Integer Equality Comparisons?

Amaran MSVC untuk Perbandingan 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;
Salin selepas log masuk

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:

  • Perbandingan kesaksamaan (== dan !=) jangan cetuskan amaran kerana, bagi pengendali ini, penukaran kepada tidak ditandatangani mengekalkan hasilnya.
  • Perbandingan ketidaksamaan (<, >, <=, dan >=) mencetuskan amaran untuk memaklumkan pengguna tentang potensi hasil yang tidak dijangka akibat penukaran.

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan