C++ tellg()返回类型

sla*_*law 9 c++

我有一个大的二进制文件,我正在阅读,我想比较当前位置与unsigned long long int.但是,基于C++文档,我不清楚是否:

  1. 什么是tellg()的返回类型
  2. 如何将tellg()与unsigned long long int进行比较?
  3. 是否有可能tellg()的返回类型具有小于unsigned long long int的最大值(来自numeric_limits)?

任何答案或建议将不胜感激.

R S*_*ahu 6

:tellg()的返回类型是什么?

A的返回类型istream::tellg()streampos.看看std :: istream :: tellg.

问:如何将tellg()与unsigned long long int进行比较?

A返回值tellg()是整数类型.所以你可以使用通常的运算符来比较两个ints.但是,您不应该这样做以从中得出任何结论.标准声称支持的唯一操作是:

可以将这种类型的两个对象与运算符==和!=进行比较.它们也可以减去,产生类型streamoff的值.

看看std :: streampos.

:tellg()的返回类型是否有可能小于unsigned long long int的最大值(来自numeric_limits)?

A该标准不作任何声明支持或反驳它.在一个平台上可能是真的,而另一个平台则是假的.

附加信息

比较streampos支持和不支持的比较操作的示例

ifstream if(myinputfile);
// Do stuff.
streampos pos1 = if.tellg();
// Do more stuff
streampos pos2 = if.tellg();

if ( pos1 == pos2 ) // Supported
{
   // Do some more stuff.
}

if ( pos1 != pos2 ) // Supported
{
   // Do some more stuff.
}

if ( pos1 != pos2 ) // Supported
{
   // Do some more stuff.
}

if ( pos1 == 0 ) // supported
{
   // Do some more stuff.
}

if ( pos1 != 0) // supported
{
   // Do some more stuff.
}

if ( pos1 <= pos2 ) // NOT supported
{
   // Do some more stuff.
}


int k = 1200;
if ( k == pos1 ) // NOT supported
{
}
Run Code Online (Sandbox Code Playgroud)

  • `tellg()`实际上返回`pos_type`(§27.7.2.3/ 39),它不一定是`std :: streampos`.您链接的引用不准确.[试试这个.](http://en.cppreference.com/w/cpp/io/basic_istream/tellg) (2认同)
  • @ 0x499602D2感谢指针.为了它的价值,在进一步挖掘时,`istream :: pos_type`最终被定义为`std :: streampos`.这就是我到达那里的方式.`istream` - >`char_traits <char>` - >`pos_type`. (2认同)