我研究了cppreference.com提供的std :: basic_filebuf :: seekpos的文档页面,并对以下句子感到困惑:
如果该文件已打开以供读取,则如有必要,更新获取区域。
据我在计算机上看到的,seekpos最终以eback()== gptr()== egptr()结束,即函数清空了获取区域。这是否意味着获取区域已更新?如果有人可以澄清的话,那将是非常好的。谢谢!
答案 0 :(得分:2)
在页面的更下方:
许多实现并没有更新seekpos()中的get区域,而是委托给下一个sgetc()调用的underflow()
和:
在某些实现中,get区域由seekpos()清空,并且需要第二个underflow()来观察效果
看起来就是你身上发生的事情。
对于“更新”的含义可以进行解释。该标准在这里非常灵活(请注意缺少明确的后置条件),基本上说“实现可以执行其开展业务所需的所有工作”。
在这种情况下,您的filebuf实现可能会在您查找时清空get区域,然后在下一个underflow()处“填充”它-可以说,两个一致的操作都是“ update”,但说实话随心所欲旋转它。