代码之家  ›  专栏  ›  技术社区  ›  titiree

在c++中,是stream.clear()发生故障后是否需要?

  •  0
  • titiree  · 技术社区  · 7 年前

    我有以下代码:

    string promptPlayerForFile(ifstream &infile, string prompt) {
        while (true) {
            string filename;
            cout << prompt;
            getline(cin, filename);
            infile.open(filename.c_str());
            if (!infile.fail()) return filename;
            infile.clear();
            cout << "Unable to open that file. Try again." << endl;
        }
    }
    

    然后我试着评论这句话 infile.clear() 看看会发生什么(我读到它需要在发生故障后包含,以便重置流的相关位。)

    但是,在注释掉它之后,函数的行为与之前一样。如果我先给了一个错误的文件名,然后给了一个正确的文件名,它就工作了,所以不管怎样,即使没有那一行,故障位也会被重置。那么 infile.clear() 它的必要性和适当用途是什么?

    2 回复  |  直到 7 年前
        1
  •  5
  •   R Sahu    7 年前

    如果使用C++ 11或更高,则不需要调用 infile.clear(); . 如果 open() 成功了吗 clear()

    如果您使用的是前C + 11编译器,则有必要调用 infile.clear() . 该语言不保证在下列情况下清除故障位: 打开() 是成功的。

    看到了吗 https://en.cppreference.com/w/cpp/io/basic_ifstream/open 清除() .

        2
  •  0
  •   Stephan Lechner    7 年前

    这个 infile.clear() 当且仅当您希望继续与流交互(例如从流中读取)时才相关。如果你的程序结束了,你不必清除错误标志。