(построенный по умолчанию) итератор end
, который вы указали в качестве места остановки копирования, будет сравниваться с другим итератором только в том случае, если попытка чтения указанных данных из файла не удалась.В этом случае он преобразует все данные в файле и достигает EOF.Это означает, что все прошло успешно, , но поток сейчас находится в состоянии сбоя, поэтому до тех пор, пока вы его не сбросите, вы не сможете больше ничего делать с этим потоком.
Вы также немного неверно истолковали вещи: !stream
эквивалентно stream.fail()
, но это , а не , то же самое, что stream.bad()
.stream.bad()
означает, что произошел серьезный сбой, например, смерть жесткого диска, когда вы пытались прочитать с него.stream.fail()
может означать что-то более мягкое (или даже нормальное), такое как неудачная попытка преобразования, возможно, потому что вы читаете некоторые данные, которые не могут быть преобразованы в целевой тип (например, поток содержит «один» и выВы пытаетесь прочитать int
) или потому, что (как в этом случае) вы достигли конца файла.
Итог: исключения iostreams редко используются.Некоторые из исключений определены как исключительные в ожидаемых случаях.