getline在c++库中可以找到两个版本
第一个是在istream的库中,第二个是在string库中
声明如下
std :: istream :: getline
istream&getline(char * s,streamsize n);
istream&getline(char * s,streamsize n,char delim);
官方给出的注释是从流中提取字符作为未格式化的输入,并将它们作为c的字符串存储到s中,直到提取的字符是定界字符,或者将n个字符写入s(包括终止的空字符)为止。
std::getline (string)
istream& getline (istream& is, string& str, char delim);
istream& getline (istream&& is, string& str, char delim);
istream& getline (istream& is, string& str);
istream& getline (istream&& is, string& str);
官方注释是将行从流转换为字符串,将其存储到str直到划界字符delim被发现(或换行字符“\ n”)。
如果到达文件末尾也停止或如果输入操作期间发生的一些其它错误。
如果找到划界符delim,则将其提取并丢弃(即不存储定界符,下一个输入操作将在定界符之后开始)。
请注意,调用之前str中的任何内容都将被新提取的序列替换。
每个提取的字符都将附加到字符串,就像其成员push_back一样。
可以看到其返回值的类型是istream& ,对于while (getline(ss, str, ‘,’)) 这样的使用为什么可以通过呢。
istream的状态由几个标志位决定,eof,badbit,failbit,这个while的判断实际上隐式调用了 !cin.fail(),
当get执行到末位或者标志位置为真 则退出while循环。