为什么从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