![](/img/trans.png)
[英]std::ofstream does not accept const char * for << operator
[英]Why << operator in ofstream is not const?
我注意到ofstream
中的operator <<
不是const
。 很明顯,這個操作符會改變文件的內容,但是它在ofstream
對象中的變化是什么?
換句話說,如果我將ofstream
作為類成員函數並且我想在const
成員函數內調用<< operator
,我必須將其更改non-const
成員函數或將ofstream
標記為mutable
但似乎不是從抽象的角度來看,對我來說是合乎邏輯的......我有沒有想念?
因為它在邏輯上改變了流。 至少,它改變了流緩沖區中的寫入位置。 它還可以修改流的狀態(例如,發生寫入錯誤時)。
但更重要的是(在我看來)是邏輯上的可變性。 寫入后流不一樣 - 它具有新值。 如果您的班級不關心這一事實,您可以聲明您的流成員是mutable
。
因為它可以調用setstate()
而不是const
,因為它改變了對象的內部結構,如流的格式化部分所述 。
請記住,雖然ofstream
本身不需要被修改以便寫入(即使它可能應該),但是也必須修改從ostream
類繼承<<
運算符的ostringstream
才能被寫入,如您需要更改內部string
對象。 因此,必須將運算符聲明為const
以涵蓋所有情況(運算符在ostream
類中定義)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.