Mengapa MSVC Menerima Perbandingan Kesaksamaan yang Ditandatangani/Tidak Ditandatangani Tanpa Amaran
Walaupun pengendaliannya yang ketat terhadap ketidakpadanan yang ditandatangani/tidak ditandatangani dalam pengendali perbandingan, Microsoft Visual C (MSVC) secara tidak dijangka bertolak ansur dengan persamaan antara jenis yang ditandatangani dan yang tidak ditandatangani. Tingkah laku ini timbul daripada peraturan penukaran asas.
Promosi Sepadu dan Penukaran Bertandatangan/Tidak Ditandatangani
Semasa perbandingan, MSVC mengikut peraturan promosi integral yang digariskan dalam C Standard 5/9 . Jika satu operan ditandatangani dan satu lagi tidak ditandatangani, operan yang ditandatangani ditukar kepada tidak ditandatangani.
Untuk kesamarataan, penukaran ini tidak menjejaskan keputusan: -1 == (tidak ditandatangani) -1. Walau bagaimanapun, untuk pengendali perbandingan lain, ia penting: -1 > 2U adalah benar kerana -1 ditukar kepada nilai tidak ditandatangani.
Tahap Amaran MSVC dan Perbandingan Ditandatangani/Tidak Ditandatangani
Tahap amaran MSVC menentukan ketidakpadanan yang ditandatangani/tidak ditandatangani mencetuskan amaran . Pembangun membuat pilihan khusus berkenaan kesaksamaan lwn. perbandingan yang lebih besar/kurang:
Pendekatan ini mencerminkan pandangan pembangun bahawa perbandingan kesamarataan yang melibatkan jenis yang ditandatangani/tidak ditandatangani selalunya disengajakan, manakala perbandingan yang lebih besar/kurang dengan jenis campuran lebih berkemungkinan membawa kepada kesilapan.
Kesimpulannya, penerimaan senyap MSVC terhadap perbandingan kesaksamaan yang ditandatangani/tidak ditandatangani berpunca daripada peraturan promosi penting dan konfigurasi amaran khusus pengkompil untuk senario sedemikian.
Atas ialah kandungan terperinci Mengapa MSVC Tidak Memberi Amaran Mengenai Perbandingan Kesaksamaan yang Ditandatangani/Tidak Ditandatangani?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!