我能找到的所有文档都说 std::basic_istream<>::ignore(n)
“提取并丢弃字符”,但这种提取的含义并不是很清楚。
对于 std::ifstream
特别是,一个实现是否可以使其等同于简单的 seekg
- 在文件中?如果是这样,主流实现会这样做吗?
否则,如果字符在被丢弃之前真的被“读取”,它看起来像ignore
。当 seekg
时是一个糟糕的选择可用(例如,使用文件或字符串流)。
最佳答案
是的,有区别。
即使我们只考虑 as-if 规则,提取字符也会影响流状态(考虑各种状态标志),我们可以从 the libstdc++ implementation 中看出流的行为就像调用者使用提取的字符一样。
如果有任何“优化”来完全跳过字符,那么这种可观察到的行为将会不同。
要应用此“优化”,您应该自己执行 seekg
,注意不要搜索到流的末尾。
关于c++ - 使用 std::ifstream,忽略字符和查找之间有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31246353/