Я дізнався про перевантаження функцій в C ++ і натрапив на це:
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);
}
З того, що я зрозумів, будь-яке значення, задане в int
діапазоні (у моєму випадку int
- 4 байти), буде викликати, display(int)
і будь-яке значення поза цим діапазоном буде неоднозначним (оскільки компілятор не може вирішити, яку функцію викликати). Він дійсний для повного діапазону int
значень, за винятком мінімального значення, тобто -2147483648
там, де компіляція не вдається з помилкою
виклик перевантаженого
display(long int)
неоднозначний
Але беручи одне і те ж значення в int
і друкуючи значення, яке дає 2147483648
. Мене буквально бентежить така поведінка.
Чому така поведінка спостерігається лише тоді, коли передано найбільш негативне число? (Поведінка однакова, якщо short
використовується а -32768
- насправді, у будь-якому випадку, коли від'ємне число та додатне число мають однакові двійкові подання)
Використовуваний компілятор: g ++ (GCC) 4.8.5