c++ - 使用 std::ifstream,忽略字符和查找之间有区别吗?

标签 c++ iostream c++03

我能找到的所有文档都说 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/

相关文章:

c++ - 我可以重载重载的运算符吗?运算符重载如何工作

java - 应对流 - nio 的 channel 与 io

C++ 输入和输出流

C# - StreamReader/StreamWriter - 另一个进程使用的文件

c++ - 什么数据类型的结构具有最大大小且元素是 FIFO?

c++ - 在 C++ 中实现智能指针的最佳方法是什么?

c++ - malloc/free 用于调整数组大小

c++ - 从 C++ 中的错误模板实例化继承

c++ - 包含来自基于 C 的代码的 C++ header (fstream)?

c++ - 如何初始化模板类型以将 POD 数据归零或默认构造非 POD 数据?