Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Lebihan Fungsi Menyebabkan Ralat dengan Nilai Integer Paling Negatif?

Mengapa Lebihan Fungsi Menyebabkan Ralat dengan Nilai Integer Paling Negatif?

Susan Sarandon
Susan Sarandonasal
2024-10-31 15:34:31341semak imbas

Why Does Function Overload Cause an Error with the Most Negative Integer Value?

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:

  • Gunakan std::numeric_limits untuk mendapatkan semula nilai minimum dan maksimum untuk jenis mudah alih:
    std::numeric_limits: :min();
  • Melemparkan nilai negatif secara eksplisit kepada jenis yang diingini:
    paparan(static_cast(-2147483648));
  • 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!

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