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, intaralıkta verilen herhangi bir değer (benim durumumda int4 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). intMin değeri haricindeki tüm değerler aralığı için geçerlidir, yani -2147483648derlemenin hata ile başarısız olduğu durumlarda
aşırı yükleme çağrısı
display(long int)belirsizdir
Ama aynı değeri intalı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 shortile 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

