2016-03-31 39 views
2

假設我正在編寫一個類來封裝windows的文件HANDLE,以便輕鬆地從文件讀取/寫入文件。該類有一個稱爲read(buffer& out)的函數,用於從文件中讀取數據。file read()const正確性

問題是,read()是否需要const

一方面,它應該是const,因爲它不會更改文件。 另一方面,它不應該是const,因爲它會將HANDLE(HANDLE)更改爲顯示在哪裏閱讀的文件。

您認爲如何?

+0

Herb Sutter在幾年前發表了一篇演講,他說C++ 11的「const」意味着線程安全。所以問題是,在沒有任何(客戶端)鎖定的情況下,調用你可以安全地從兩個線程調用'read()'?我懷疑答案是否定的,所以函數不應該是'const'。 –

回答

3

不是常量。修改文件句柄的位置。

1

聽起來像你的班級 - 我會稱之爲FileAccessor - 有效地編排文件上的操作。假設你想有一個函數實現一些算法處理文件,並且它想通過調用output_diagnostics(const FileAccessor& h)來顯示一些診斷信息,那麼它可以合理的顯示哪些信息不會干擾調用output_diagnostics的算法?它也許可以輸出文件中的當前位置/字節偏移量。獲取該位置的函數應該是const。可能還有其他一些東西,例如文件是否以某種方式鎖定,文件大小或文件系統路徑 - 看起來都是公平的,以便製作const。但是,如果它從文件中執行了read,那麼它將修改調用output_diagnostic的算法的後續操作read,「從當前位置截斷」以及所有其他操作的方式,因此read函數應該是不是const