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 int
nell'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 int
valori eccetto il suo valore minimo, cioè -2147483648
dove la compilazione fallisce con l'errore
la chiamata di sovraccarico
display(long int)
è ambigua
Ma prendendo lo stesso valore ad an int
e 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 short
si 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