在C ++中用信号通知文件流中的错误

时间:2009-03-07 12:00:15

标签: c++

我有以下样本:

#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 ++不是很熟悉,这是正常的行为吗?我在这里弄错了什么?

2 个答案:

答案 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;