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)で派生したクラスごとに個別に定義された方法で、1つ以上の制御されたシーケンス内のストリーム位置を変更します。
  • デフォルトの動作:を返しますpos_type(off_type(-1))

ここまでは順調ですね。basic_streambuf私が使用している派生は、および/またはの位置を個別に変更できios_base::inますios_base::out。しかし、両方が指定されている場合、何を返す必要がありますか?

ios_base::in または を指定するios_base::outと、特定のシーケンスの新しいストリーム位置が返されます。

4

2 に答える 2

1

何が起こるかを定義するのはあなたのストリーム次第です。組み込みのストリームは異なり、読み取り位置と書き込み位置を別々に設定できるもの(stringstream)と、1つだけ持つもの(fstream)があります。

ユーザーが再配置を行い、インとアウトの両方を指定する場合は、おそらく両方を移動する必要があります。現在の位置を取得するためのオフセットがゼロのシークである場合、位置が異なっていても失敗するのは不合理ではありません。

于 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 に答える