Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Pemuatan Lebihan Fungsi Menjadi Kabur dengan Integer Paling Negatif dalam C?

Mengapa Pemuatan Lebihan Fungsi Menjadi Kabur dengan Integer Paling Negatif dalam C?

Susan Sarandon
Susan Sarandonasal
2024-11-01 13:41:29482semak imbas

Why Does Function Overloading Become Ambiguous with the Most Negative Integer in C  ?

Kekaburan Pemuatan Terlebih Fungsi dengan Integer Paling Negatif

Dalam C , lebihan fungsi membenarkan berbilang fungsi dengan nama yang sama tetapi senarai parameter yang berbeza. Walau bagaimanapun, menghadapi nilai integer paling negatif boleh mengakibatkan ralat kekaburan disebabkan oleh penukaran jenis tersirat.

Memahami Isu

Coretan kod berikut menunjukkan isu:

<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); // error: ambiguous function call
}

Apabila integer paling negatif (-2147483648) dihantar ke paparan(-2147483648), pengkompil menjana ralat "lebihan fungsi samar-samar". Ini berlaku kerana pengkompil tidak dapat menentukan fungsi yang hendak dipanggil: display(int) atau display(unsigned).

Peranan Integer Literal

Gelagat yang diperhatikan dalam contoh yang diberikan berpunca daripada ketiadaan literal integer negatif dalam C . Literal integer mesti bermula dengan digit bukan sifar. Dalam kes -2147483648, tanda negatif ditafsirkan sebagai operator tolak unari, menghasilkan ungkapan -1 * (2147483648).

Taip Promosi

Sejak 2147483648 melebihi julat int, ia dinaikkan pangkat kepada int panjang. Walau bagaimanapun, promosi ini mewujudkan kesamaran antara jenis parameter paparan(int) dan paparan(tidak ditandatangani), yang membawa kepada ralat.

Penyelesaian Mudah Alih

Untuk mendapatkan nilai minimum atau maksimum untuk sesuatu jenis dalam cara mudah alih, seseorang boleh menggunakan:

<code class="cpp">std::numeric_limits<type>::min(); // or max()</code>

Dengan menggunakan kaedah ini, lebihan fungsi samar-samar dielakkan, memastikan pengendalian jenis yang betul tanpa mengira pelaksanaannya.

Atas ialah kandungan terperinci Mengapa Pemuatan Lebihan Fungsi Menjadi Kabur dengan Integer Paling Negatif dalam C?. 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