我有以下样本:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream file;
cout << file << endl; // 0xbffff3e4
file.open("no such file");
cout << file << endl; // 0
cout << (file == NULL) << endl; // 1
cout << file.fail() << endl; // 1
}
如果文件是NULL
,如何调用fail
成员函数?我对C ++不是很熟悉,这是正常的行为吗?我在这里弄错了什么?
答案 0 :(得分:3)
文件是一个对象 - 它不能为null。但是,ifstream有一个操作符void *()重载,当文件处于错误状态时返回0。当你说(例如):
cout << file << endl;
编译器将其转换为:
cout << file.operator void*() << endl;
此转换将用于各种地方 - 基本上可以使用指针或整数类型的任何地方。当你说:
时使用它(file == NULL)
将运算符void *()返回的零值与NULL进行比较,得到1。
答案 1 :(得分:0)
尝试使用file.good()或将文件转换为bool:
file.open("no such file");
if (file)
cout << "Open OK" << endl;
else
cout << "Open FAILED" << endl;