Вы можете заставить определенный поток генерировать исключение для любого из eof / fail / bad, вызывая его ios :: exceptions () с соответствующей битовой маской.Таким образом, вы могли бы переписать пример в начальном вопросе выше как:
std::ifstream stream;
stream.exceptions(std::ios::failbit | std::ios::badbit);
stream.open(filename.c_str());
Здесь поток будет выдавать исключение, когда бит-бит или битбит установлены.Например, если ifstream :: open () терпит неудачу, он установит бит ошибки и выдаст исключение.Конечно, это вызовет исключение позже, если какой-либо из этих битов будет установлен в потоке, так что это перезапись не совсем совпадает с первоначальным примером.Вы можете позвонить
stream.exceptions(std::ios::goodbit);
, чтобы отменить все исключения в потоке и вернуться к проверке ошибок.