std::streampos
保证是unsigned long long
吗?
如果不是这样,std::istream::seekg
如何在大于4G的文件上正常工作?
答案 0 :(得分:8)
来自http://en.cppreference.com/w/cpp/io/fpos:
std::streampos
是类模板
template< class State > class fpos;
std::streampos
的typedef为std::fpos<std::char_traits<char>::state_type>
类型fpos
的每个对象都保存流中的字节位置(通常作为类型std::streamoff
的私有成员)。
来自http://en.cppreference.com/w/cpp/io/streamoff:
类型std::streamoff
是一个足够大小的有符号整数类型,表示操作系统支持的最大可能文件大小。通常,这是long long
的typedef。
回答你的问题......
问题 std::streampos
保证是unsigned long long
吗?
回答我确定您的意思是要确定持有该职位的基础整数类型是否保证为unsigned long long
。从这个意义上讲,真正的问题是std::streamoff
是否被认为是unsigned long long
。这个问题的答案是&#34; No&#34;,你可以从上面的描述中推断出来。
问题如果不是这样,std::istream::seekg
如何在大于4G的文件上正常工作?
回答如果操作系统支持使用大于4G的文件,那么它的std::streamoff
就是相应的类型。即便如此,它很可能是一个有符号整数类型。这是http://en.cppreference.com/w/cpp/io/streamoff的另一个引用。
std :: streamoff值-1也用于表示某些I / O库函数的错误条件。
答案 1 :(得分:4)
不,不能保证是unsigned long long
。
特别是对于较旧的编译器,它可能不适用于大于4 GB的文件(并且在少数情况下它已经签名,因此它仅适用于高达2 GB的文件 - 但是当典型的硬盘驱动器为20到40 MB时,这似乎不是一个主要的考虑因素。)