C ++是否可以安全地取消流

c++ is it safe to unget on fstreams

本文关键字:取消 安全 是否      更新时间:2023-10-16

假设input.txt是 1 字节的文本文件:

std::ifstream fin("input.txt", std::ios::in);
fin.get();              // 1st byte extracted
fin.get();              // try to extract 2nd byte
std::cout << fin.eof(); // eof is triggered
fin.unget();            // return back
std::cout << fin.eof(); // eof is now reset
fin.get();              // try to extract 2nd byte, eof assumed
std::cout << fin.eof(); // no eof is triggered

似乎unget()会破坏eof标志触发,也会破坏文件指针。我做错了什么吗?

eof 未设置,但 good 也没有设置。流忽略操作,因为它处于故障模式。

我不记得unget在 EOF 之后应该做什么,但如果我使用 clear 允许重试,unget会立即回到失败状态。

http://ideone.com/JkDrwG

通常最好使用自己的缓冲区。回击是一种黑客。