在cplusplus.com上给出了一个例子:
// read a file into memory
#include <iostream> // std::cout
#include <fstream> // std::ifstream
int main () {
std::ifstream is ("test.txt", std::ifstream::binary);
if (is) {
// get length of file:
is.seekg (0, is.end);
int length = is.tellg();
is.seekg (0, is.beg);
char * buffer = new char [length];
std::cout << "Reading " << length << " characters... ";
// read data as a block:
is.read (buffer,length);
if (is)
std::cout << "all characters read successfully.";
else
std::cout << "error: only " << is.gcount() << " could be read";
is.close();
// ...buffer contains the entire file...
delete[] buffer;
}
return 0;
}
有人可以解释为什么最后if (is)
可以确定是否已读取所有字符?如果我们已经进入的语句和我解释它的方式(可能过于简单和错误)我们只检查是否存在,但是这已经建立了吗?
答案 0 :(得分:3)
std::ifstream
有一个转化运算符bool
,它返回是否在流上设置了badbit
或failbit
。
它基本上是if (!is.fail()) {/*...*/}
的缩写。
答案 1 :(得分:1)
std::ifstream
定义operator bool() const
,它隐式地将流转换为布尔值。
来自运营商bool()的cplusplus.com:
返回是否设置了错误标志(failbit或badbit)。
请注意,此函数不会返回与成员商品相同的功能,但是 成员的反面失败。