8

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 or ios_base::out,我们将返回特定序列的新流位置。

4

2 回答 2

1

定义会发生什么取决于您的流。内置流不同,其中一些可以有单独的读写位置(stringstream),而另一些只有一个(fstream)。

如果用户重新定位并指定进出,也许您应该同时移动两者。如果是零偏移的seek获取当前位置,如果位置不同,失败也不是没有道理的。

于 2011-07-23T14:46:37.437 回答
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
于 2011-07-23T22:20:47.667 回答