而(file_object)是一个导致无限循环

时间:2014-12-04 19:51:36

标签: c++

这似乎很奇怪。我有一段代码如下:

List(const char* fn) {
    std::ifstream file(fn);

    if (!file){
        throw std::string("*** Failed to open file ") + std::string(fn) + std::string(" ***");
    }
    while (file) {
        T e;
        if (e.load(file)){
            list.push_back(*new T(e));
        }
    }
}

与其他人一起,似乎整个文件都运行得很好。但对我来说,我在机器上陷入无限循环。

OS X - g ++ 4.2

我不知道为什么这里有不同的功能。

这是无限循环:

while (file) {
    T e;
    if (e.load(file)){
        list.push_back(*new T(e));
    }
}

1 个答案:

答案 0 :(得分:2)

只要文件处于有效状态,

while(file)将返回true。

你还没有告诉我们T是什么或load方法做了什么,所以我们真的不能给你更多的信息。您需要确保load方法关闭文件描述符,或将其保留为eof状态或类似的其他内容。