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

Susan Sarandon
Lepaskan: 2024-11-01 13:41:29
asal
481 orang telah melayarinya

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
}
Salin selepas log masuk

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>
Salin selepas log masuk

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!

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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!