Причина, по которой ни один из битов состояния не установлен во входном файле, заключается в том, что
вы читаете через streambuf
, а не istream
; Настоящий
чтение происходит в ostream::operator<<
, который не имеет
доступ к istream
.
Однако я не уверен, что это имеет значение. Ввод будет читаться до
streambuf::sgetc
возвращает EOF
. Что заставит eofbit
быть
установите в istream
, если вы читали через istream
.
Единственное, что могло бы предотвратить это, если бы вы читали через
istream
- если streambuf::sgetc
сгенерировал исключение, которое вызвало бы
badbit
устанавливается в istream
; другого механизма не предусмотрено
для ввода streambuf
сообщить об ошибке чтения. Так что заверните ваш out <<
in.rdbuf()
в try ... catch
блок и надейтесь, что реализация
на самом деле проверяет наличие аппаратных ошибок. (Я не проверял недавно,
но многие ранние реализации полностью игнорировали ошибки чтения, рассматривая
их как обычный конец файла.)
И, конечно, поскольку вы буквально читаете байты (несмотря на <<
, я
не вижу, как можно назвать этот форматированный ввод), вам не нужно
рассмотрим третий возможный источник ошибок, ошибку формата (например,
«abc» при вводе целого).