2016-10-23 6 views
21

なぜstd::io::copyは、リーダとライターの両方の引数を可変参照として渡す必要があるのですか?なぜio :: copyは読み取りと書き込みの両方に可変参照が必要ですか?

私は、書き込まれているデータに対応して内部状態を変更するためにライターを変更する必要がある理由を理解できます。

しかし、なぜ読者も可変参照としてフラグを立てる必要がありますか?私がデータを読んでいるだけなのであれば、私はちょうど特定の型への参照であり、可変参照ではないでしょうか?

答えて

29

Readタイプは、一般的にワンショット:それから読むことによって、です。

標準入力を考慮してください:これは一度しか読み取ることができないので、何かを変更する必要があります。ソケットから読み取った場合、入手したネットワークパケットと、いつでも読み取るデータの量の違いを説明するために使用される内部バッファーを突然変異させることになります。読み込み可能なもの同士をつなぎ合わせるために使用されるChainからの読み込みはどうですか?突然変異がなければ、読んでいるはずのものを追跡することはできません。

確かに、それは可能が読み取りを実行するために変更可能なアクセスを必要としないReadタイプを持っているのですが、それは普遍真実ではない、それが普遍的真実ではないので、Read形質が変更可能なアクセスを要求しています。

+0

これは実際にはっきりとしたクリスタルの説明です。ありがとう! –

+5

'File'でも、現在の読み取りオフセットを更新しています。 –

関連する問題