Я удалил свой исходный ответ, потому что хотел проверить это.Это то, что я вижу, если во время чтения возникает ошибка (EOF не учитывается в этом контексте), исходная строка изменяется, и ветвь видит измененную версию.Чтобы проверить, я сделал следующее, создал файл 2 ГБ (touch
затем truncate
), код выше для чтения.Пока код работал, удалил файл (это должно установить failbit
- я думаю).Немедленно прекращает чтение, но строка изменяется - она имеет больший размер.
Для меня это означает, что строка изменяется, даже если операция потока завершается неудачей.