C++ 为什么 getline() 结束 while 循环?

C++ Why does getline() end the while loop?

我刚刚开始在 C++ 中处理文件,但我对文件对象和 getline() 的工作方式还是陌生的。

所以我有点理解 getline() 函数及其工作原理,并且当在布尔上下文中使用时,它 returns 是一个通过 void* 的布尔值,但我不明白的是为什么在编写 while 循环代码不会导致无限循环或错误,因为没有任何语句可以终止循环,例如 break。 如有任何帮助,我们将不胜感激!

我唯一能特别想到的是,当 getline() 执行其操作并通过每一行工作时,它会主动更改 while(Tfile) 的状态以及到达文件末尾时 while( Tfile) 不再正确,这会导致循环终止,但我不太确定。

ifstream Tfile("player.txt");
string line;
while(Tfile){
        if (getline(Tfile, line))
    cout << line << endl;   
}

getline 在到达文件末尾时设置 Tfileeofbit。这会导致 Tfileoperator bool 评估为 false,然后终止循环。

参见 iostate, getline's return specification, and ios operator bool

请注意,由于 getline returns 对您传递给它的流的引用,因此此循环的惯用形式是:

ifstream Tfile("player.txt");
string line;
while(getline(Tfile, line)) {
  cout << line << endl;   
}