定义于头文件 <istream>
template< class CharT, |
类模板 basic_istream
提供字符流上的高层输入支持。受支持操作包含带格式的输入(例如整数值或空白符分隔的字符与字符串)和无格式输入(例如未处理字符和字符数组)。此功能以通过 basic_ios
基类访问的底层 basic_streambuf
类所提供的接口实现。大多数库实现中, basic_istream
有一个非继承数据成员:用于存储 basic_istream::gcount() 所返回的值。
带格式的输入
提取带格式数据
std::basic_istream<CharT,Traits>::operator>>
basic_istream& operator>>( short& value ); | (1) | |
basic_istream& operator>>( int& value ); | (2) | |
basic_istream& operator>>( long& value ); | (3) | |
basic_istream& operator>>( long long& value ); | (4) | (C++11 起) |
basic_istream& operator>>( float& value ); basic_istream& operator>>( double& value ); basic_istream& operator>>( long double& value ); | (5) | |
basic_istream& operator>>( bool& value ); | (6) | |
basic_istream& operator>>( void*& value ); | (7) | |
basic_istream& operator>>( std::ios_base& (*func)(std::ios_base&) ); | (8) | |
basic_istream& operator>>( std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) ); | (9) | |
basic_istream& operator>>( basic_istream& (*func)(basic_istream&) ); | (10) | |
basic_istream& operator>>( std::basic_streambuf<CharT,Traits>* sb ); | (11) |
1-4) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象,因而可能跳过前导空格后,以调用 std::num_get::get() 释出整数值。
5) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象,因而可能跳过前导空格后,以调用 std::num_get::get() 释出浮点值。
6) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象,因而可能跳过前导空格后,以调用 std::num_get::get() 释出 bool 值。
7) 表现为有格式输入函数 (FormattedInputFunction) 。在构造并检查 sentry 对象,因而可能跳过前导空格后,以调用 std::num_get::get() 释出通用指针值。
8-10) 调用 func(*this) ,其中 func
为 I/O 操纵符。
11) 表现为无格式输入函数 (UnformattedInputFunction) 。在构造并检查 sentry 对象后,从输入流释出所有数据并将它存储到 sb
。若满足下列条件之一则释出停止:
- 输入序列上出现文件尾;
- 输出序列中插入失败(该情况下不释出要被插入的字符);
- 出现异常(该情况下捕捉异常,而仅若
exceptions()
中启用了failbit
才重抛)。
任一情况下,存储释出的字符数于成员变量中,其值可由对 gcount() 的后继调用访问。若 sb
为空指针或未插入字符到 sb
中,则调用 setstate(failbit) (若启用则会抛出 std::ios_base::failure )。
若释出失败(例如若在期待数位处遇到字母),则保留 | (C++11 前) |
若释出失败,则写入零到 | (C++11 起) |
参数
value | - | 到要存储释出值到的整数或浮点值的引用 |
func | - | 指向 I/O 操纵符函数的指针 |
sb | - | 指向要写入全部数据到的流缓冲的指针 |
返回值
1-9,11) *this
10) func(*this)
调用示例
#include <iostream>
#include <iomanip>
#include <sstream>
int main()
{
std::string input = "41 3.14 false hello world";
std::istringstream stream(input);
int n;
double f;
bool b;
stream >> n >> f >> std::boolalpha >> b;
std::cout << "n = " << n << '\n'
<< "f = " << f << '\n'
<< "b = " << std::boolalpha << b << '\n';
// 用 streambuf 重载释出剩余内容
stream >> std::cout.rdbuf();
std::cout << '\n';
}
输出