basic_streambuf :: seekoff当ios_base :: in |时应该返回什么是否指定了ios_base :: out?

时间:2011-07-23 13:51:05

标签: c++ iostream streambuf

  

27.6.3.4.2缓冲区管理和定位

pos_type seekoff(off_type off, ios_base::seekdir way,
    ios_base::openmode which = ios_base::in | ios_base::out);
     
      
  • 效果:改变一个或多个中的流位置   受控序列的方式是为每个单独定义的   本条款中的basic_streambuf派生的类(27.8.2.4,   27.9.1.5)。
  •   
  • 默认行为:返回pos_type(off_type(-1))
  •   

到目前为止,这么好。我正在使用的basic_streambuf推导可以单独更改ios_base::in和/或ios_base::out的位置。但是,当指定两者时,我需要返回什么?

如果您指定ios_base::in ios_base::out,我们会返回特定序列的新流位置。

2 个答案:

答案 0 :(得分:1)

您可以通过流来定义发生的情况。内置流不同,有些可以有独立的读写位置(stringstream),而其他只有一个(fstream)。

如果用户进行了重新定位并指定了输入和输出,也许您应该同时移动它们。如果是具有零偏移的搜索来获得当前位置,如果位置不同则失败是不合理的。

答案 1 :(得分:0)

从27.8.2.4开始寻找后,你似乎会失败。

检查条件表130,其表明仅当

时才应定位输入和输出序列
(which & (ios_base::in | ios_base::out)) == (ios_base::in) | ios_base::out))
and way == either ios_base::beg or ios_base::end