std :: basic_filebuf :: seekpos的文档

时间:2018-11-28 17:44:40

标签: c++ language-lawyer std

我研究了cppreference.com提供的std :: basic_filebuf :: seekpos的文档页面,并对以下句子感到困惑:

  

如果该文件已打开以供读取,则如有必要,更新获取区域。

据我在计算机上看到的,seekpos最终以eback()== gptr()== egptr()结束,即函数清空了获取区域。这是否意味着获取区域已更新?如果有人可以澄清的话,那将是非常好的。谢谢!

1 个答案:

答案 0 :(得分:2)

在页面的更下方:

  

许多实现并没有更新seekpos()中的get区域,而是委托给下一个sgetc()调用的underflow()

和:

  

在某些实现中,get区域由seekpos()清空,并且需要第二个underflow()来观察效果

看起来就是你身上发生的事情。

对于“更新”的含义可以进行解释。该标准在这里非常灵活(请注意缺少明确的后置条件),基本上说“实现可以执行其开展业务所需的所有工作”。

在这种情况下,您的filebuf实现可能会在您查找时清空get区域,然后在下一个underflow()处“填充”它-可以说,两个一致的操作都是“ update”,但说实话随心所欲旋转它。