爲什麼從C++標準庫中打開std :: fstream類的成員函數返回void而不是bool來立即檢查成功的打開?爲什麼std :: fstream返回void而不是bool
0
A
回答
2
因爲如果設置了例外情況,open
調用不成功,或者它們使用failbit
來指示發生錯誤,它會拋出異常。從文檔:
失敗時,failbit標誌被設置(其可以與構件 失敗進行檢查),並根據與異常設置例外值可以 被拋出。
+2
只有在例外情況發生時纔會拋出 – FrozenHeart
+0
感謝您的評論。添加到答案的澄清。 –
1
我的理解是,當fstream允許您嘗試讀取任何類型的文件(或者我也想寫入文件)時,fstream可能會失敗的方式有很多種。根據情況和程序員的不同,「失敗」也可能不明確。鑑於此,我認爲從布爾返回值中獲取任何有意義的東西都是困難的。
相關問題
- 1. 爲什麼clock :: is_steady會返回const bool而不是bool?
- 2. 爲什麼std :: runtime_error :: what()返回const char *而不是std :: string const&
- 3. 爲什麼這個函數返回void而不是虛假
- 4. 爲什麼mapped_file :: data返回char *而不是void *
- 5. 爲什麼Servlet.service()方法返回void而不是ServletResponse的實例?
- 6. 爲什麼std :: count(_if)返回iterator :: difference_type而不是size_t?
- 7. 爲什麼返回-1而不是0?
- 8. 爲什麼String.Format(「%1s」,「」)不返回「」而是「」?
- 9. 爲什麼user.home返回「\」而不是「/」?
- 10. 從函數返回值而不是返回void有什麼好處嗎?
- 11. 返回類型爲void的方法返回的是什麼?
- 12. 這是什麼聲明`void func(bool b ...)`?
- 13. (void(^)(BOOL支持))是什麼意思?
- 14. 爲什麼std :: fstream使用char *?
- 15. 爲什麼std :: fstream類不需要std :: string?
- 16. 爲什麼DbSet Add會返回一個實體實例而不是void?
- 17. 什麼是從CGBitmapContextGetData返回的void *?
- 18. php bool函數返回字符串而不是bool
- 19. 爲什麼Boost庫會將「可轉換爲`bool`」而不是僅僅返回`bool`s?
- 20. 爲什麼addListener()通常返回void?
- 21. 爲什麼Servlet.service旨在返回void?
- 22. 爲什麼它更好(返回IList而不是返回列表)?
- 23. 保持BOOL而不是bool
- 24. 爲什麼std :: string :: substr會拋出異常而不是返回空字符串?
- 25. 爲什麼得到的std ::的元組返回右值引用,而不是值
- 26. 找不到爲什麼collection爲bool屬性返回false?
- 27. 爲什麼std :: string.find(text,std :: string:npos)不返回npos?
- 28. 爲什麼std :: packaged_task <void()>無效?
- 29. 爲什麼std :: optional :: value()&&;返回&&?
- 30. 爲什麼`std :: common_type_t <std :: ostream&,std :: ostream&>`等於`std :: ostream`而不是`std :: ostream&`?
返回bool不一定是明顯的含義:它可能意味着「如果錯誤發生,則返回true」以及「如果成功則返回true」。有不同的設計選擇。沒有辦法讓.isGood()或isBad()錯誤。 – stefan