2016-12-28 88 views
2

我注意到ofstream中的operator <<不是const。很明顯,這個操作符會改變文件的內容,但是它在ofstream對象內部會發生什麼變化?爲什麼<< instream中的運算符不是const?

換句話說,如果我有ofstream作爲一個類的成員函數,我想打電話就可以了<< operator一個const成員函數中我必須把它改成non-const成員函數或標記ofstream作爲mutable但似乎沒有從抽象的角度對我來說是邏輯的..我錯過了什麼嗎?

+0

至少,它將改變流對象的緩衝區內容。 –

+0

如果寫入失敗,它也可以改變狀態。 –

+0

@latedeveloper我應該知道它的內部緩衝區?我的意思是他們可以讓它變得可變,因爲它是非常內在的東西 –

回答

8

因爲它在邏輯上改變了流。最起碼,它改變了流緩衝區內的寫入位置。它也可以修改流的狀態(例如,發生寫入錯誤時)。

但是更重要的是(在我看來)是邏輯的可變性。寫作之後的流不一樣 - 它具有新的價值。如果你的班級不關心這個事實,你可以聲明你的流成員mutable

0

請記住,雖然ofstream本身沒有進行修改,以被寫入(即使它可能應該),這也從ostream類繼承的<<運營商ostringstream是爲了修改寫入到,因爲你需要改變內部的string對象。因此,必須聲明運營商const以涵蓋所有情況(運營商在ostream類中定義)。

相關問題