这是一个读取尽可能多的单词的C ++代码 从给定的文本文件中尽可能直到它满足EOF。
string text;
fstream inputStream;
inputStream.open("filename.txt");
while (inputStream >> text)
cout << text << endl;
inputStream.close();
我的问题是:
我对这个问题的回答是:
我的回答有意义吗?即使我的回答确实有意义,将InputStream转换为bool并不能让我感到舒服。 :)
答案 0 :(得分:11)
在将while循环的条件(即inputStream&gt;&gt; text)转换为布尔值(即true或false)时,究竟执行了什么程序?
operator>>
返回对流的引用。
在C ++ 11中,引用随后由流的bool
函数转换为operator bool()
,该函数返回等效的!fail()
。
在C ++ 98中,使用operator void*()
实现了同样的目的,返回的指针是NULL
表示失败,如果fail()
为假,则为非空指针,然后在bool
评估中隐式转换为while
。
答案 1 :(得分:0)
我知道我的答案已经被user657267完美回答。但是我又添加了一个例子来更容易地理解答案。
// evaluating a stream
#include <iostream> // std::cerr
#include <fstream> // std::ifstream
int main () {
std::ifstream is;
is.open ("test.txt");
if (is) { <===== Here, an example of converting ifstream into bool
// read file
}
else {
std::cerr << "Error opening 'test.txt'\n";
}
return 0;
}