В следующей программе
#include <iostream>
#include <sstream>
int main()
{
std::istringstream iss("-89");
std::cout << static_cast<bool>(iss) << iss.good() << iss.fail() << iss.bad() << iss.eof() << '\n';
unsigned int u;
iss >> u;
std::cout << static_cast<bool>(iss) << iss.good() << iss.fail() << iss.bad() << iss.eof() << '\n';
return 0;
}
потоки lib читают знаковое значение в unsigned int
без даже икоты, молча приводят к неправильному результату:
11000
10001
Нам нужно улавливать ошибки несоответствия типа времени выполнения. Если бы мы не просто поймали это в симуляции, это могло бы взорвать очень дорогое оборудование.
Как мы можем безопасно читать значение unsigned из потока?