Все, у меня есть код здесь, что я не могу объяснить поведение. Он размещен ниже. Я посмотрел на Why does integer overflow cause errors with C++ iostreams?, но на самом деле это не отвечает на мой вопрос.Неожиданное поведение от cin при переполнении int
#include <iostream>
#include<stdio.h>
using namespace std;
int main()
{
int x;
scanf("%d", &x);
cout << "Value of x = " << x << endl;
cin >> x;
cout << "Failure Detected = " << cin.fail() << endl;
cout << "Value of x = " << x << endl;
return 0;
}
Итак, что я ожидал этот код, чтобы сделать для чтения в целом, распечатать значение этого целого, читайте в другом целом числе (в одной и то же переменное), и распечатать это целое. Если я введу ввод 7 и 2, то он работает так, как ожидалось. Однако, если я введу 2^31 (переполнение int на один) для первого и второго ввода, тогда первый вывод будет произносить «Значение x = -2147483648», а на втором выходе будет указано «Значение x = 2147483647». cin.fail() также вернет true. Что делает cin для ввода? Я думал, что если cin.fail() был истинным, значение x должно остаться без изменений. Если бы не остался незатронутым, я ожидал бы, что значение x переполнится как обычно (например, scanf). Что здесь происходит здесь? Почему он ограничивает значение при максимальном значении целого числа?
Заранее благодарен!
Пожалуйста, не downvote за то, что очевидно; это на самом деле довольно тонко. – Bathsheba