c++11 标准模板(STL)(std::basic_istream)(四)

定义于头文件 <istream>
template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_istream : virtual public std::basic_ios<CharT, Traits>

 类模板 basic_istream 提供字符流上的高层输入支持。受支持操作包含带格式的输入(例如整数值或空白符分隔的字符与字符串)和无格式输入(例如未处理字符和字符数组)。此功能以通过 basic_ios 基类访问的底层 basic_streambuf 类所提供的接口实现。大多数库实现中, basic_istream 有一个非继承数据成员:用于存储 basic_istream::gcount() 所返回的值。

带格式的输入

提取带格式数据

std::basic_istream<CharT,Traits>::operator>>

basic_istream& operator>>( short& value );
basic_istream& operator>>( unsigned short& value );

(1)

basic_istream& operator>>( int& value );
basic_istream& operator>>( unsigned int& value );

(2)

basic_istream& operator>>( long& value );
basic_istream& operator>>( unsigned long& value );

(3)

basic_istream& operator>>( long long& value );
basic_istream& operator>>( unsigned 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 )。

若释出失败(例如若在期待数位处遇到字母),则保留 value 不修改并设置 failbit

(C++11 前)

若释出失败,则写入零到 value 并设置 failbit 。若释出结果对于 value 过大或过小,则写入 std::numeric_limits<T>::max() 或 std::numeric_limits<T>::min() 并设置 failbit 标志。

(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';
}

输出

猜你喜欢

转载自blog.csdn.net/qq_40788199/article/details/131612535