Rumah > Artikel > pembangunan bahagian belakang > Mengapa Lebihan Fungsi Menyebabkan Ralat dengan Nilai Integer Paling Negatif?
Ralat Lebihan Fungsi Ambiguous dengan Nilai Integer Negatif
Apabila melebihkan fungsi dalam C , adalah penting untuk memahami keperluan khusus dan had integer negatif literal. Pertimbangkan contoh berikut:
<code class="cpp">void display(int a) { cout << "int" << endl; } void display(unsigned a) { cout << "unsigned" << endl; } int main() { int i = -2147483648; cout << i << endl; // prints -2147483648 display(-2147483648); // compilation error }
Orang mungkin menjangkakan bahawa sebarang nilai integer akan memanggil display(int), manakala nilai di luar julat int akan menjadi samar-samar. Walau bagaimanapun, ralat kompilasi berlaku secara khusus apabila menggunakan nilai int paling negatif, -2147483648.
Mengapa Ralat Berlaku
Kuncinya terletak pada ketiadaan literal integer negatif dalam C . Literal integer tidak boleh bermula dengan tanda "-", bermakna -2147483648 ditafsirkan sebagai operator penolakan unari yang digunakan pada 2147483648.
Memandangkan 2147483648 melebihi julat int, ia dinaikkan taraf secara automatik kepada int panjang. Kekaburan timbul apabila paparan(-2147483648) digunakan: pengkompil tidak boleh menentukan sama ada untuk memanggil paparan(int) atau paparan(int panjang).
Pengendalian Pengecualian
Tingkah laku ini diperhatikan apabila nombor negatif dan perwakilan positifnya mempunyai nilai binari yang sama, seperti dengan -32768 untuk jangka pendek.
Mengelakkan Kekaburan
Untuk mengelakkan kekaburan , pertimbangkan amalan terbaik berikut:
Dengan mematuhi garis panduan ini, anda boleh mengelakkan kekaburan dan memastikan kod anda berfungsi seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapa Lebihan Fungsi Menyebabkan Ralat dengan Nilai Integer Paling Negatif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!