C ++标准说($ 27.6.3.4.2)std::basic_streambuf::seekoff
和std::basic_streambuf::seekpos
的效果是针对从std::streambuf
派生的每个类别单独定义的。但是std::istream
/ std::ostream
怎么可以工作呢?后两个类的接口的定义至少有关于pubseekoff
/ pubseekpos
的参数意味着什么的几个假设。
似乎没有std::basic_streambuf
部分的澄清,并不是所有实现std::basic_streambuf
接口的子类都可以与流一起使用,即使它们支持任意搜索。例如,根据当前规范,子类可以说在MyStreamBuf::seekoff
中,参数which = ios_base::in
ond which = ios_base::out
分别控制输出和输入序列(注意:反转)。我认为除了通常的“支持”和“不支持”之外,特定的搜索操作可以被指定为“支持但具有不同的接口”,这是非常反直觉的。或者那是标准的意图吗?
答案 0 :(得分:5)
寻求非常有限。关于所有你可以确定将工作的任何一个
流是寻求到流的开头,寻求到最后,或
寻求你从tell
获得的职位。如果是流
双向,你必须在每次改变方向时寻求。
如果您对该流有更多了解,您可以做更多;在...上
例如,stringstream
,您几乎可以在任何地方寻找,并且
寻求输入不会影响输出中的位置,副
反之亦然。在fstream
上,语义还取决于流是否存在
以文本模式或二进制文件打开,可能在实际文件上打开
在流后面:如果它是在`“/ dev / tty”(Unix)上打开ifstream
或者
“CONS”(Windows),然后你可能根本找不到(但可能不会
如果你尝试错误。