g は、std::iostream
のgcount
、tellg
、およびseekg
メンバーで何を表していますか?そしてpcount
、tellp
そしてseekp
の p は?
なぜ彼らは単にcount
、tell
、seek
と呼ばれないのですか?
読み取りと書き込みの両方をサポートするストリームでは、実際には読み取り用(つまり "get")と書き込み用(つまり "put")の2つの位置があります。
seekp
(basic_ostream
から継承)とseekg
(basic_istream
から継承)があるのはそのためです。
サイドノート:言語Cは、C++とは対照的に、両方のポインタに対してそのような関数fseek
を1つだけ持っています。読み取りから書き込み、またはその逆に切り替えるときには、ポインタの位置を変更する必要があります(たとえば、 this answerを参照)。これを回避するために、C++はそれぞれ読み取りと書き込みに別々の関数を提供しています。
C++では、ファイルをナビゲートするときに、getポインタとputポインタの2つのポインタを使用できます。最初のものは読み取り操作に使用され、2番目のものは書き込み操作に使用されます。
seekg()
は、 g etポインタを参照点を基準にして目的の位置に移動するために使用されます。
tellg()
は、 g etポインタがファイル内のどこにあるかを知るために使用されます。
seekp()
は、 p utポインタを参照点に対して望ましい位置に移動するために使用されます。
tellp()
は、 p utポインタがファイル内のどこにあるかを知るために使用されます。
主な情報源: Quora 、2017年12月1日のGunjan B. Yadavによる回答。