Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ seekg和seekp:寻道(streampos pos)和寻道(streamoff off,ios::beg)之间的差异_C++_Iostream_Standard Library_Seek - Fatal编程技术网

C++ seekg和seekp:寻道(streampos pos)和寻道(streamoff off,ios::beg)之间的差异

C++ seekg和seekp:寻道(streampos pos)和寻道(streamoff off,ios::beg)之间的差异,c++,iostream,standard-library,seek,C++,Iostream,Standard Library,Seek,如果我们查阅istream和ostream的文档,我们有以下功能: istream& seekg ( streampos pos ); istream& seekg ( streamoff off, ios_base::seekdir dir ); ostream& seekp ( streampos pos ); ostream& seekp ( streamoff off, ios_base::seekdir dir ); 我想知道为什么每次都有两种形式的

如果我们查阅istream和ostream的文档,我们有以下功能:

istream& seekg ( streampos pos );
istream& seekg ( streamoff off, ios_base::seekdir dir );

ostream& seekp ( streampos pos );
ostream& seekp ( streamoff off, ios_base::seekdir dir );
我想知道为什么每次都有两种形式的函数,而不仅仅是:

istream& seekg ( streamoff off, ios_base::seekdir dir = ios_base::beg );
ostream& seekp ( streamoff off, ios_base::seekdir dir = ios_base::beg );

拥有这两个函数而不是标准的四个函数有什么区别?

iostreams库相当复杂,涉及面很广。类型
streampos
streamoff
是实现定义的,不需要实现将它们变成与您建议的方式相关的整数


例如,一个实现可以提供更大、更强大的代理对象,分别表示位置和偏移的概念,在这种情况下,用户可能希望能够直接使用这样的对象进行搜索,而不是手动将一个转换为另一个。

streampos
std::fpos
的类型定义,它保存流中的当前位置和当前换档状态。诸如shift-jis之类的多字节编码方案具有依赖于状态的编码。这基本上意味着,根据前面的字符序列,您对流中某个字节的解释方式可能会有所不同。使用
streampos
不仅可以在流中保持位置,还可以存储流中该点的换档状态。此外,由于换行符等在不同的系统上的解释不同,因此文本文件中的逻辑位置可能与其实际物理位置不同。这就是为什么
streampos
不能是简单的整数类型的一些原因。

旧的iostreams
streampos
是实现定义的。是std::fpos的typedef@JesseGood:OK,但这是一个定义了的实现吗?好的,我现在明白了,所以
std::fpos
是定义了实现的。