g在gcount,tellg和seekg中代表什么?


74

什么是立场在std::iostreamgcounttellgseekg会员?而ppcounttellpseekp

他们为什么不只是叫counttellseek


5
它仅被称为seek(例如)纯文本,因此您无法为组合的输入输出流的输入和输出部分使用单独的指针。
一些程序员花花公子

1
顺便说一句:答案也解释了p。编辑p的问题可能更有用。
user202729

Answers:


82

在同时支持读取和写入的流中,您实际上有两个位置,一个位置用于读取(即用“ g”表示的“ get”),另一个位置用于写入(即用“ p”表示的“ put”)。

这就是为什么您有一个seekp(继承自basic_ostream)和一个seekg(继承自basic_istream)的原因。

旁注:与C ++相比,C语言fseek对于两个指针仅具有一个这样的函数;从读取切换为写入时,指针必须重新放置,反之亦然(例如,参见答案)。为了避免这种情况,C ++为读取和写入分别提供了单独的功能。


53

C ++在浏览文件时提供了两个指针:get指针和put指针。第一个用于读取操作,第二个用于写入操作。

  • seekg()用于将移动等指针到期望的位置相对于一个参考点。

  • tellg()用于了解g指针在文件中的位置。

  • seekp()用于将移动p UT指针到期望的位置相对于一个参考点。

  • tellp()是用于了解其中p UT指针是在文件中。

主要来源:QuoraGunjan B.Yadav于2017年12月1日回答。


17
为什么C ++标准的人将API命名为好像键盘具有每次击键成本。🙄
亚历山大

14
@Alexander:显然是为了避免人们通过按键获得报酬。聪明且面向业务的程序员自然会为标准库发明自己的类型和包装器,从而自然地克服了这个问题,它们当然可以完美地工作,并且没有任何缺点。
丹尼尔·卡米尔·科扎尔18/12/5


1
@Ajay,我喜欢!
亚历山大
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.