函数
<string>

std::getline (string)

(1)
istream& getline (istream& is, string& str, char delim);
(2)
istream& getline (istream& is, string& str);
(1)
istream& getline (istream&  is, string& str, char delim);istream& getline (istream&& is, string& str, char delim);
(2)
istream& getline (istream&  is, string& str);istream& getline (istream&& is, string& str);
从流中获取一行到字符串
is中提取字符并将它们存储到str中,直到找到分隔符delim(或换行符'\n',对于(2))。

如果在is中到达文件末尾,或者在输入操作期间发生其他错误,提取也会停止。

如果找到分隔符,则提取并丢弃它(即,它不被存储,并且下一个输入操作将在其之后开始)。

请注意,调用之前str中的任何内容都将被新提取的序列替换。

每个提取的字符都会附加到string,就像调用了其成员push_back一样。

参数

的 C++ 等效文件是
从中提取字符的istream对象。
str
string对象,提取的行存储在此处。
调用之前字符串中的内容(如果有)将被丢弃并替换为提取的行。

返回值

与参数is相同。

如果满足以下条件,则对此函数的调用可能会设置is的任何内部状态标志:

flagerror
eofbit在其操作期间到达字符源的末尾。
failbit获得的输入不能被解释为此类型对象的有效文本表示。
在这种情况下,distr保留调用之前的参数和内部数据。
请注意,某些eofbit情况也会设置failbit.
badbit发生了上述以外的错误。
(有关这些的更多信息,请参见ios_base::iostate

此外,在任何这些情况下,如果已使用is的成员函数ios::exceptions设置了相应的标志,则会抛出ios_base::failure类型的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// extract to string
#include <iostream>
#include <string>

int main ()
{
  std::string name;

  std::cout << "Please, enter your full name: ";
  std::getline (std::cin,name);
  std::cout << "Hello, " << name << "!\n";

  return 0;
}

复杂度

未指定,但通常与strlength成线性关系。

迭代器有效性

str相关的任何迭代器、指针和引用都可能无效。

数据竞争

isstr两个对象都被修改。

异常安全

基本保证:如果抛出异常,则isstr都最终处于有效状态。

另见