Sto imparando a conoscere il sovraccarico di funzioni in C ++ e mi sono imbattuto in questo:
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);
}
Da quello che ho capito, qualsiasi valore fornito intnell'intervallo (nel mio caso intè 4 byte) verrà chiamato display(int)e qualsiasi valore al di fuori di questo intervallo sarà ambiguo (poiché il compilatore non può decidere quale funzione chiamare). È valido per l'intera gamma di intvalori eccetto il suo valore minimo, cioè -2147483648dove la compilazione fallisce con l'errore
la chiamata di sovraccarico
display(long int)è ambigua
Ma prendendo lo stesso valore ad an inte stampando il valore si ottiene 2147483648. Sono letteralmente confuso con questo comportamento.
Perché questo comportamento viene osservato solo quando viene passato il numero più negativo? (Il comportamento è lo stesso se shortsi usa a -32768- infatti, in ogni caso dove il numero negativo e il numero positivo hanno la stessa rappresentazione binaria)
Compilatore utilizzato: g ++ (GCC) 4.8.5

