gcount、tellg和seekg中的g代表什么?

79
< p >在 std::iostreamgcounttellgseekg 成员函数中,g 代表什么?而在 pcounttellpseekp 中的 p 又代表什么呢?

为什么它们不只叫作 counttellseek 呢?


5
如果它只被称为普通的“寻找”(例如),那么你就不能为输入和输出部分在一个组合输入和输出流中拥有单独的指针。 - Some programmer dude
1
顺便说一下:答案也解释了p。编辑问题以获取更有用的信息可能会更好。 - user202729
2个回答

90

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

这就是为什么您有一个seekp(从basic_ostream继承而来)和一个seekg(从basic_istream继承而来)。

顺便说一下:与C++相比,语言C只有一个函数fseek用于指针。在C中,当从读模式切换到写模式或反之时,需要重新定位指针(例如参见答案)。为了避免这种情况,C++分别提供了用于读和写的不同函数。


55

C++提供了两个指针来在文件中进行导航: get指针用于读操作,put指针用于写操作。

  • seekg()用于将get指针相对于参考点移动到所需位置。

  • tellg()用于确定get指针在文件中的位置。

  • seekp()用于将put指针相对于参考点移动到所需位置。

  • tellp()用于确定put指针在文件中的位置。

主要来源:Quora,Gunjan B. Yadav于2017年12月1日发布的答案。


19
C++标准委员会为什么要将API命名得好像键盘输入每个按键都有成本一样。 - Alexander
14
@Alexander: 显然是为了避免以按键计酬的方式付款给人员。聪明而商业化的程序员自然会通过发明自己的类型和标准库封装来克服这个问题,这显然总是完美无缺且没有任何缺点的。 - Daniel Kamil Kozar
1
@Alexander https://en.cppreference.com/w/cpp/chrono/high_resolution_clock - Ajay
1
@Ajay 我喜欢它! - Alexander

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接