Ok, entonces tengo algunos problemas con los iostreams de C++ que se sienten muy raros, pero probablemente es un comportamiento definido, considerando que esto ocurre tanto con MSVC++ como con G ++.¿Por qué el desbordamiento de enteros causa errores con iostreams en C++?
Decir que tengo este programa:
#include <iostream>
using namespace std;
int main()
{
int a;
cin >> a;
cout << a << endl;
cin >> a;
cout << a << endl;
return 0;
}
Si intencionalmente desbordamiento dando el primer cin un valor que es mayor que el límite máximo de un int, todas las llamadas adicionales a cin.operator>>()
a volver de inmediato por alguna razón y a
se establece en algún valor. El valor parece ser indefinido.
¿Por qué y dónde se documenta este comportamiento? ¿Hay alguna manera de averiguar si ocurrió un desbordamiento?
Además, este programa similar parece funcionar como me propongo. Si desbordo el valor, dará algún valor a a
y continuará como si el desbordamiento nunca ocurriera.
#include <cstdio>
using namespace std;
int main()
{
int a;
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
scanf("%d", &a);
printf("%d\n", a);
return 0;
}