C ++ 'da fonksiyon aşırı yüklemeyi öğreniyorum ve şuna rastladım:
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);
}
Anladığım kadarıyla, int
aralıkta verilen herhangi bir değer (benim durumumda int
4 bayttır) arayacak display(int)
ve bu aralığın dışındaki herhangi bir değer belirsiz olacaktır (çünkü derleyici hangi işlevi çağıracağına karar veremez). int
Min değeri haricindeki tüm değerler aralığı için geçerlidir, yani -2147483648
derlemenin hata ile başarısız olduğu durumlarda
aşırı yükleme çağrısı
display(long int)
belirsizdir
Ama aynı değeri int
alıp basmak değeri verir 2147483648
. Bu davranışla tam anlamıyla kafam karıştı.
Bu davranış neden yalnızca en negatif sayı geçildiğinde gözlemleniyor? (A short
ile birlikte kullanıldığında davranış aynıdır -32768
- aslında, negatif sayı ve pozitif sayının aynı ikili gösterime sahip olduğu her durumda)
Kullanılan derleyici: g ++ (GCC) 4.8.5