2012-10-03 44 views
0

爲什麼從C++標準庫中打開std :: fstream類的成員函數返回void而不是bool來立即檢查成功的打開?爲什麼std :: fstream返回void而不是bool

+0

返回bool不一定是明顯的含義:它可能意味着「如果錯誤發生,則返回true」以及「如果成功則返回true」。有不同的設計選擇。沒有辦法讓.isGood()或isBad()錯誤。 – stefan

回答

2

因爲如果設置了例外情況,open調用不成功,或者它們使用failbit來指示發生錯誤,它會拋出異常。從文檔:

失敗時,failbit標誌被設置(其可以與構件 失敗進行檢查),並根據與異常設置例外值可以 被拋出。

+2

只有在例外情況發生時纔會拋出 – FrozenHeart

+0

感謝您的評論。添加到答案的澄清。 –

1

我的理解是,當fstream允許您嘗試讀取任何類型的文件(或者我也想寫入文件)時,fstream可能會失敗的方式有很多種。根據情況和程序員的不同,「失敗」也可能不明確。鑑於此,我認爲從布爾返回值中獲取任何有意義的東西都是困難的。

相關問題