我刚刚开始在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;
}
1条答案
按热度按时间fnvucqvd1#
getline
在到达End Of File时设置Tfile
的eofbit
。这会导致Tfile
的operator bool
计算为false,然后终止循环。请参见iostate、getline's return specification和ios operator bool。
请注意,由于
getline
返回的是对传递给它的流的引用,因此该循环的惯用形式为: