fstream / ifstream / ofstream 对象如何转换为布尔值
How is fstream / ifstream / ofstream objects convert to bool
我想知道,这些对象是如何转换为布尔值的。我的意思是编译器在转换时所依赖的。在位标志上?正如我认为它的工作原理一样:编译器检查标志,如果 !goodbit 然后返回 false 否则为 true。 例如:
#include <iostream>
#include <fstream>
int main() {
std::ifstream file("someDir.txt");
if(!file) { \ Checks the flags? If !goodbit (eofbit, badbit or failbit) return false else true?
\some code
}
return 0;
附言我的英语不好,对不起
编译器使用operator bool
将流转换为布尔值。在文档中,您可以阅读该std::basic_ios<CharT,Traits>::operator bool
检查流是否没有错误。
1( 如果返回
true
,则返回空指针fail()
,否则返回非空指针。此指针可隐式转换为布尔值,可用于布尔上下文。2( 如果流没有错误并且已准备好进行 I/O 操作,则返回
true
。具体来说,返回 !fail((。
在同一页上有一个非常有用的表格,详细说明了哪些位(eofbit, failbit, badbit
(导致fail()
返回真或假。
相关文章:
- 变量定义到C++布尔值转换
- fstream / ifstream / ofstream 对象如何转换为布尔值
- 将uintptr_t转换为布尔值会使 SSO 基准速度减慢数倍
- 在目标 c++ 中将 CFTypeRef 转换为布尔值
- isspace 函数的性能警告,从 int 转换为布尔值
- 将返回表达式隐式转换为布尔值
- 将结构转换为布尔值
- 整数在 C++ 中没有被类型转换为布尔值
- 为什么我的变体将 std::string 转换为布尔值
- 为什么使用 int 的转换,而不是布尔值
- lambda 转换为布尔值,而不是推导函数指针类型
- 从常量字符串到布尔值的隐式强制转换
- 我无法将'2D array whit bool'转换为"空 2D 数组布尔值"(用于生命游戏)
- 尝试将字符串变量转换为布尔值会导致 "true" 和 "false" 都等于 0
- Typedef shared_ptr转换为<T>布尔值
- 如果模板值可转换为布尔值,则在编译时禁用类方法
- 避免或警告在 GCC 中从常量字符* 隐式转换为布尔值
- 为什么 lambda 会转换为值为真的布尔值?
- 有没有办法将模板的替换失败转换为布尔值(真/假)或标签(标准::true_type/标准::false_type)
- 将流隐式转换为布尔值