public member function
<istream> <iostream>

std::operator>> (basic_istream)

单个字符 (1)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char& c);
character sequence (2)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char* s);
单个字符 (1)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char& c);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char& c);
character sequence (2)
template<class charT, class traits>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>& is, charT* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  signed char* s);template<class traits>basic_istream<char,traits>&  operator>> (basic_istream<char,traits>& is,  unsigned char* s);
rvalue extraction (3)
template<class charT, class traits, class T>basic_istream<charT,traits>& operator>> (basic_istream<charT,traits>&& is, T& val);
Extract characters
此运算符(>>)应用于输入流时,称为提取运算符,执行格式化输入

(1) single character
is 中提取下一个字符,并将其存储为 c 的值。
(2) character sequence
is 中提取字符,并将它们作为 c 字符串存储在 s 中,一旦遇到空白字符或提取了 (width()-1) 个字符(如果 width 不为零)就会停止。
一个空字符charT())会自动追加到写入的序列中。
然后,该函数将 width 重置为零。
(3) rvalue extraction
允许从 rvalue basic_istream 对象中提取,效果与从 lvalue 中提取相同:它实际上调用:is>>val

在内部,该函数通过首先使用 noskipws 设置为 false 来构造一个 sentry 来访问 is 的输入序列:这可能会刷新绑定的流和/或丢弃前导空白(请参阅 basic_istream::sentry)。然后(如果 good),它从 is 的关联流缓冲区对象中提取字符(如同调用其成员函数 sbumpcsgetc),最后销毁 sentry 对象后返回。

请注意,如果此函数在提取单个字符(1)时提取了流的最后一个字符,它不会设置其 eofbit 标志,但尝试在其之后提取会这样做。

调用此函数不会改变 isgcount 的返回值。

参数

的 C++ 等效文件是
从中提取字符的输入流对象。
c
存储提取字符的对象。
s
指向字符数组的指针,提取的字符将作为 c 字符串存储在其中。
is 的成员函数 width 可用于指定要写入的字符数限制。
val
存储内容的此对象。
T 应为受此函数或 is 的成员函数 operator>> 支持的右侧参数类型。
charTtraitsis 的类模板参数(请参阅 basic_istream)。

返回值

basic_istream 对象(is)。

提取的值或序列不会被返回,而是直接存储在作为参数传递的变量中。

错误通过修改内部状态标志来发出信号。
flagerror
eofbit该函数停止提取字符,因为由 is 控制的输入序列已无更多可用字符(已到达文件尾)。
failbit要么没有提取字符,要么无法将它们解释为相应类型的有效值。
badbit流错误(例如,当此函数捕获由内部操作抛出的异常时)。
当设置此标志时,流的完整性可能受到影响。
一次操作可能会设置多个标志。

如果操作设置了已在 is 的成员 exceptions 中注册的内部状态标志,则该函数将抛出 isfailure 成员类型的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
// example on extraction
#include <iostream>     // std::cin, std::cout

int main () {
  char str[10];

  std::cout << "Enter a word: ";
  std::cin.width (10);               // limit width
  std::cin >> str;
  std::cout << "The first 9 chars of your word are: " << str << '\n';

  return 0;
}

此示例演示了使用标准 basic_istream 对象 cin 来使用上面显示的某些重载 operator>> 函数。

数据竞争

修改 cs 指向的数组的元素。
修改 is
并发访问同一流对象可能导致数据竞争,标准流对象 cinwcin 在这些对象与 stdio 同步时除外(在这种情况下,不会引发数据竞争,尽管对于提取字符归因于线程的顺序没有保证)。

异常安全

基本保证:如果抛出异常,所有涉及的对象都处于有效状态。
如果 is 的结果错误状态标志不是 goodbit 并且 is 的成员 exceptions 被设置为对该状态抛出,则它会抛出 failure 成员类型的异常。
任何由内部操作抛出的异常都会被函数捕获和处理,设置 isbadbit 标志。如果 badbitis 上对 exceptions 的最后一次调用中被设置,则该函数会重新抛出捕获到的异常。

另见