对于std::ifstream,忽略字符和查找字符有区别吗?

With an std::ifstream, is there a difference between ignoring characters and seeking?

我能找到的所有文档都说 std::basic_istream<>::ignore(n) "extracts and discards characters",但并不清楚这个提取的含义。

特别是对于 std::ifstream,实现是否可以使其等同于在文件中简单地 seekg-ing?如果是这样,主流实现会这样做吗?

否则,如果字符在被丢弃之前确实是 "read",那么当 seekg 可用时(例如,使用文件或字符串流),ignore 似乎是一个糟糕的选择.

是的,有区别。

即使我们只考虑 as-if 规则,提取字符也会对流状态产生影响(考虑各种状态标志),我们可以从 the libstdc++ implementation 中看出流的行为就像调用者使用了提取的字符。

如果有 "optimisation" 完全跳过字符,那么这种可观察到的行为会有所不同。

要应用此 "optimisation" 您应该自己执行 seekg,注意不要超过流的末尾。