Je suis en apprentissage à propos de la surcharge de fonctions en C++ et 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);
}
De ce que j'ai compris, toute valeur donnée dans l' int
de la gamme (dans mon cas int
est de 4 octets) appellera display(int)
et toute valeur en dehors de cette plage sera ambigu (car le compilateur ne peut pas décider quelle fonction appeler). Il est valable pour la gamme complète des int
valeurs à l'exception de sa valeur min c'est à dire -2147483648
où la compilation échoue avec l'erreur
appel de surchargés
display(long int)
est ambigu
Mais en prenant la même valeur à un int
et l'impression de la valeur donne 2147483648
. Je suis littéralement confondre avec ce comportement.
Pourquoi est-ce le comportement observé que lorsque la plupart d'un nombre négatif est-il passé? (Le comportement est le même, si un short
est utilisé avec -32768
- en fait, dans tous les cas où le nombre négatif et positif nombre ont la même représentation binaire)
Compilateur utilisé: g++ (GCC) 4.8.5