Saya belajar tentang fungsi overloading di C ++ dan menemukan ini:
void display(int a)
{
cout << "int" << endl;
}
void display(unsigned a)
{
cout << "unsigned" << endl;
}
int main()
{
int i = -2147483648;
cout << i << endl; //will display -2147483648
display(-2147483648);
}
Dari apa yang saya pahami, nilai apa pun yang diberikan dalam intkisaran (dalam kasus saya intadalah 4 byte) akan memanggil display(int)dan nilai apa pun di luar kisaran ini akan menjadi ambigu (karena penyusun tidak dapat memutuskan fungsi mana yang akan dipanggil). Ini valid untuk rentang intnilai lengkap kecuali nilai minnya, yaitu di -2147483648mana kompilasi gagal dengan kesalahan
panggilan overloaded
display(long int)ambigu
Tapi mengambil nilai yang sama intdan mencetak nilai yang diberikan 2147483648. Saya benar-benar bingung dengan perilaku ini.
Mengapa perilaku ini diamati hanya ketika angka paling negatif dilewatkan? (Perilakunya sama jika a shortdigunakan dengan -32768- pada kenyataannya, dalam kasus apa pun di mana bilangan negatif dan bilangan positif memiliki representasi biner yang sama)
Kompiler yang digunakan: g ++ (GCC) 4.8.5

