std :: streampos保证长签名是无符号的吗?

xml*_*lmx 6 c++ types integer file unsigned-long-long-int

std::streampos保证是unsigned long long

如果不是这样,如何std::istream::seekg在大于4G的文件上正常工作?

R S*_*ahu 8

来自http://en.cppreference.com/w/cpp/io/fpos:

std::streampos 是类模板的特化

template< class State > class fpos;
Run Code Online (Sandbox Code Playgroud)

std::streampos 是typedef'是 std::fpos<std::char_traits<char>::state_type>

每个类型的对象都fpos保存流中的字节位置(通常作为类型的私有成员std::streamoff).

来自http://en.cppreference.com/w/cpp/io/streamoff:

该类型std::streamoff是一个足够大小的有符号整数类型,表示操作系统支持的最大可能文件大小.通常,这是一个typedef long long.

回答你的问题......

问题std::streampos保证是unsigned long long

回答我相信你的意思是要确定是否保证持有该头寸的基本整数类型unsigned long long.从这个意义上讲,真正的问题是是否std::streamoff有必要进行保证unsigned long long.该问题的答案是"否",您可以从上面的描述中推断出来.

问题如果不是这样,如何std::istream::seekg在大于4G的文件上正常工作?

解答如果操作系统支持使用大于4G的文件,std::streamoff则会相应地进行设置.即便如此,它很可能是一个有符号整数类型.这是http://en.cppreference.com/w/cpp/io/streamoff的另一个引用.

std :: streamoff值-1也用于表示某些I/O库函数的错误条件.