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 int
kisaran (dalam kasus saya int
adalah 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 int
nilai lengkap kecuali nilai minnya, yaitu di -2147483648
mana kompilasi gagal dengan kesalahan
panggilan overloaded
display(long int)
ambigu
Tapi mengambil nilai yang sama int
dan 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 short
digunakan 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