J'apprends la surcharge de fonctions en C ++ et je suis tombé sur ceci:
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);
}
D'après ce que j'ai compris, toute valeur donnée dans la int
plage (dans mon cas int
est de 4 octets) sera appelée display(int)
et toute valeur en dehors de cette plage sera ambiguë (puisque le compilateur ne peut pas décider quelle fonction appeler). Il est valide pour toute la plage de int
valeurs sauf sa valeur minimale, c'est-à-dire -2147483648
lorsque la compilation échoue avec l'erreur
l'appel de surcharge
display(long int)
est ambigu
Mais prendre la même valeur à un int
et imprimer la valeur donne 2147483648
. Je suis littéralement confus avec ce comportement.
Pourquoi ce comportement n'est-il observé que lorsque le nombre le plus négatif est passé? (Le comportement est le même si a short
est utilisé avec -32768
- en fait, dans tous les cas où le nombre négatif et le nombre positif ont la même représentation binaire)
Compilateur utilisé: g ++ (GCC) 4.8.5