这两个条件是否等效
Are these two conditions equivalent?
在返回流之前执行输入操作是一种惯用的C++技术。它看起来像这样:
while (in >> var)
或
while (std::getline(in, line))
但是当这两个函数返回时,它们返回对流的引用,结果如下:
while (in)
然后调用operator bool()
来检查!fail()
。这是我的问题。既然!fail()
只检查failbit
或badbit
而不检查eofbit
,那么这如何安全?不能在没有设置failbit
或badbit
的情况下在流中设置eofbit
并且条件仍然通过吗?
例如,以下工作:
is.setstate(ios_base::eofbit);
if (is)
std::cout << "It works";
如果到达文件末尾,则设置eofbit
。 如果设置了eofbit
,并尝试读取操作,则设置failbit
。因此,如果在到达文件末尾后尝试读取操作,则会设置failbit
,这就解释了为什么"读取直到文件末尾"习惯用法有效。
相关文章:
- 无论条件是否为true,if总是在c++中执行
- Vulkan 的传输队列系列功能和显卡支持:条件检查是否准确?
- 是否可以在C++中进入更高级别的范围条件?
- 是否可以为一个循环设置多个条件
- 在if条件下,右或左改变值的相等性检查是否有任何区别
- 在C++中,是否可以编写一个条件的lambda,即只是一个计算结果为真或假的条件
- 如果条件取决于模板类型并且在编译时已知,是否可以保证C++编译器不会生成分支?
- 如何检查条件是否为 true 5 秒?
- 是否可以编写C++不使用任何条件语句交换输入的函数?
- 是否可以在条件之前对加载或存储进行重新排序?
- 是否根据编译器版本有条件地包含源文件
- C :是否值得使用static_cast避免使用数字的条件
- 是否可以删除此条件语句
- 在不再满足条件后,while 循环是否停止验证?
- 如果检查和内联条件之间是否存在编译器差异
- 检查前提条件是否存在原子增量,即原子值小于指定值
- 这两个条件是否等效
- c++ 11基于范围的for循环条件是否在每个循环中都被求值?
- 检查循环中出现的任何条件是否已满足c++
- 检查循环条件是否应计入比较总数