getline() 如何循环读取多行文件?

how does getline() read a multiple-line file in loops?

我对std::getline函数的使用有些困惑。见以下代码:

#include <sstream>
#include <string>
std::ifstream ifs(filename);
std::string line;

while (std::getline(ifs, line))
{
  //...//
}

for ( std::string s; getline(ifs, s)){
  //...//
}

对于 while 循环和 for 循环,似乎每次在新的迭代中,“geline”都会读取一个新行,例如如果我们有一个文件存储:

1 2
3 4
5 6

然后在第一次迭代中,getline 读取 1 2 ,然后在下一次迭代中读取 3 4 ...那么,它如何知道在迭代开始时应该从哪一行开始读取?

文件流是字节(“字符”)的来源。每次您从文件中读取一个字符时,文件获取指针 都会前进到下一个要读取的字符。

也就是说,每次阅读,您都会得到下一个未读个字符。

std::getline() 简单地读取字符,直到它获得分隔符值(默认情况下为 '\n')。因此,每次调用 getline() 都会获取文件中的下一行。