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 intrango (en mi caso intes 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 intvalores excepto su valor mínimo, es decir, -2147483648cuando la compilación falla con el error
la llamada de sobrecargado
display(long int)es ambigua
Pero tomar el mismo valor en an inte 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 shortse 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

