Estoy aprendiendo sobre la sobrecarga de funciones en C ++ y encontré esto:
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);
}
Por lo que entendí, cualquier valor dado en el int
rango (en mi caso int
es de 4 bytes) llamará display(int)
y cualquier valor fuera de este rango será ambiguo (ya que el compilador no puede decidir qué función llamar). Es válido para el rango completo de int
valores excepto su valor mínimo, es decir, -2147483648
cuando la compilación falla con el error
la llamada de sobrecargado
display(long int)
es ambigua
Pero tomar el mismo valor en an int
e imprimir el valor da 2147483648
. Estoy literalmente confundido con este comportamiento.
¿Por qué se observa este comportamiento solo cuando se pasa el número más negativo? (El comportamiento es el mismo si short
se usa a con -32768
- de hecho, en cualquier caso donde el número negativo y el número positivo tengan la misma representación binaria)
Compilador utilizado: g ++ (GCC) 4.8.5