2016-12-28 13 views
2

ofstreamoperator <<constではないことに気付きました。この演算子がファイルの内容を変更するのは明らかですが、ofstreamオブジェクト内では何が変わりますか?言い換えればなぜinstreamの<<演算子がconstでないのですか?

、私はクラスのメンバ関数としてofstreamを持っていると私はconstメンバ関数内でそれに<< operatorを呼び出したい場合、私はnon-constメンバ関数にそれを変更したり、mutableとしてofstreamをマークする必要がありますが、それはないようです私のための抽象的な視点からの論理...私は何かが恋しくなったのですか?

+0

少なくとも、ストリームオブジェクトのバッファ内容が変更されます。 –

+0

書き込みが失敗した場合でもステータスを変更することができます。私はその内部バッファを知っていなければなりませんか? –

+0

私は内部的なものなので変更可能にすることができます –

答えて

8

ストリームを論理的に変更するためです。最低限、ストリームバッファ内の書き込み位置を変更します。また、ストリームのステータスを変更することもできます(たとえば、書き込みエラーが発生した場合など)。

しかし、(私の見解では)論理的な変更が重要です。ストリームは書いた後では同じではなく、新しい値を持っています。クラスがこの事実を気にしない場合は、ストリームメンバーmutableを宣言することができます。

0

ofstream自体が(でもそれはおそらくべきですが)に書き込まれるように変更する必要はありませんが、またostreamクラスから<<演算子を継承ostringstreamが書き込まれるために修正しなければならないことに注意してくださいに変更してください。内部のstringオブジェクトを変更する必要があります。そのため、演算子はすべての場合をカバーするようにconstと宣言しなければなりません(演算子はostreamクラスで定義されています)。

関連する問題