关于Boost Bufferstream实现的困惑

时间:2015-03-07 23:20:27

标签: c++ boost

我经常使用 Boost Interprocess library ,它提供了一个I / O流类bufferstream,它基本上类似于std::stringstream,但它运行时除外任意用户提供的内存缓冲区。

我已经广泛使用了这个流类,并且我也使用它的源代码来学习很多关于实现/扩展C ++ I / O流的知识。

然而,一条实现代码让我觉得非常奇怪,而且我想知道是否有人确切知道Boost设计师为何如此实现它。

具体来说,它是streambuffer类boost::interprocess::basic_bufferbuf中的一个函数。此类继承自std::basic_streambuf,并覆盖所有虚拟保护方法以提供特定行为。

source code可在此处在线浏览。

具体来说,函数basic_bufferbuf::seekpos()实现如下:

   virtual pos_type seekpos(pos_type pos, std::ios_base::openmode mode
                                 = std::ios_base::in | std::ios_base::out)
   {  return seekoff(pos - pos_type(off_type(0)), std::ios_base::beg, mode);  }

通常,覆盖std::basic_streambuf::seekpos()的流缓冲区实现只需调用std::basic_streambuf::seekoff并将起始位置设置为std::ios_base::beg,这样就可以了。

但是为什么实现者在这里写pos - pos_type(off_type(0))?为什么从起始位置减去零?有什么用呢?

我怀疑它必须与异常off_typepos_type类型有关,但我无法想象。通常,pos_typeoff_type只是签名的整数类型。

那么为什么在这里减零呢?

0 个答案:

没有答案