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

vmjh9lq9  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(135)

我刚刚开始在C++中处理文件,我对文件对象和getline()的工作方式仍然很陌生。
所以我有点理解getline()函数和它是如何工作的,当在布尔上下文中使用时,它通过void* 返回布尔值,但我不明白的是为什么在代码中while循环不会导致无限循环或错误,因为没有任何语句可以终止循环,例如break。任何帮助都将非常感激,谢谢!
我能特别想到的唯一一件事是,当getline()执行其操作并通过每一行工作时,它会主动更改while(Tfile)的状态,当到达文件末尾时,while(Tfile)不再为true,这将导致循环终止,但我不太确定。

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

fnvucqvd1#

getline在到达End Of File时设置Tfileeofbit。这会导致Tfileoperator bool计算为false,然后终止循环。
请参见iostategetline's return specificationios operator bool
请注意,由于getline返回的是对传递给它的流的引用,因此该循环的惯用形式为:

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

相关问题