Dowiaduję się o przeciążaniu funkcji w C ++ i natknąłem się na to:
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);
}
Z tego, co zrozumiałem, każda wartość podana w intzakresie (w moim przypadku intto 4 bajty) zostanie wywołana, display(int)a każda wartość spoza tego zakresu będzie niejednoznaczna (ponieważ kompilator nie może zdecydować, którą funkcję wywołać). Obowiązuje dla całego zakresu intwartości z wyjątkiem jego wartości minimalnej, tj. -2147483648Gdy kompilacja kończy się niepowodzeniem z powodu błędu
wywołanie przeciążenia
display(long int)jest niejednoznaczne
Ale biorąc tę samą wartość do an inti wypisując wartość daje 2147483648. Dosłownie jestem zdezorientowany tym zachowaniem.
Dlaczego to zachowanie jest obserwowane tylko wtedy, gdy zostanie przekazana najbardziej ujemna liczba? (Zachowanie jest takie samo, jeśli a shortjest używane z -32768- w rzeczywistości w każdym przypadku, gdy liczba ujemna i liczba dodatnia mają tę samą reprezentację binarną)
Używany kompilator: g ++ (GCC) 4.8.5

