1. 简介

其实叫它istream有点不合适,因为该头文件不仅定义了istream,还定义了iostream

2. basic_istream模版

basic_istream继承自basic_ios,也是其它输入流的基类。

2.1 sentry类

The class sentry defines a class that is responsible for doing exception safe prefix and suffix operations.

sentry是哨兵的意思,标准给出的解释是,这个类是为了做一些异常安全的前置和后置工作。 所有格式化输入函数在执行前都会构造一个sentry对象,如果该对象构造成功,这些函数会继续执行; 否则,格式化函数会根据情况设置badbit位,并抛出异常。

2.2 格式化输入函数

  • operator >> : 该运算符有多个重载版本,分别定义了包括bool、short、unsigned等在内的多个格式化输入。 但注意,这些函数不包括对char有关类型的重载(但C++14好像有)

2.3 非格式化输入函数

  • gcount : 返回上一次非格式化函数提取的字符数
  • get : 提取字符。
  • getline : 提取一行字符。
  • ignore : 提取并且放弃字符。
  • peek : “peek”下一个字符,不提取
  • read : 提取一块字符。
  • readsome : 提取内部流缓冲区存有的字符。
  • putback放回最近提取的一个字符。
  • unget : “un-get”一个字符。

2.4 流定位函数

  • tellg : 返回输入流当前字符的当前位置
  • seekg : 设置输入流的当前位置。

2.5 同步函数

  • sync : 这个函数有点难理解,它的内部调用顺序是istream::sync -> basic_streambuf::pubsync -> basic_streambuf::sync。 因此要从底层函数的语义去理解它:将缓冲区的内容与关联的字符流同步。 因此,如果是标准输入流,则是将缓冲区的内容清空,保持与键盘输入的同步; 如果是文件流,则是将缓冲区内容与文件内容同步。

3 basic_iostream模版

该模版只是简单地多继承了basic_istream和basic_ostream,并定义了几个protected的移动赋值运算符和swap成员函数。

4 manipulators

5 typedefs

  • typedef basic_istream<char> istream
  • typedef basic_istream<wchar_t> wistream
  • typedef basic_iostream<char> iostream
  • typedef basic_iostream<wchar_t> wiostream

C++ 头文件系列(istream)的更多相关文章

  1. C++ 头文件系列(iterator)

    简介 该头文件围绕迭代器展开,定义了一系列与迭代器有关的概念,但最最最重要的一点就是----它和其它容器一起实现了C++容器的Iterator设计模式. Iterators are a general ...

  2. C++ 头文件系列(iostream)

    1. 简介 这个头文件非常特殊,它只声明了8个常用流对象. 2. 8个对象 2.1 窄字符对象(char) extern istream cin extern ostream cout extern ...

  3. C++ 头文件系列(array)

    注意,该头文件仅在C++11中标准才开始出现. 简介 与语言内置的数组一样, array类模版支持几乎所有内置数组包含的特性: 顺序的(sequence) 内存连续的(contiguous stora ...

  4. C++ 头文件系列(queue)

    简介 这个头文件定义了两个跟队列有关的类----quque.priority_queue,分别实现的是队列 和 优先队列这两个概念. 但是与这两个类模版与其它类模版(vector.array等)最大的 ...

  5. C++ 头文件系列(stack)

    简介 该头文件只含有一个类模版stack, 它实现栈的概念,是一个容器适配器(说实话,在写这篇随笔之前我都不知道有这么个类模版). 栈 栈只有一个重要的特性: LIFO(last-in first-o ...

  6. C++ 头文件系列(vector)

    简介 vector头文件包含vector的类模版以及该模版的显示特化版本vector< bool >. vector是C++容器库中非常通用的一种容器,如果你不知道该决定使用哪一种容器,或 ...

  7. C++ 头文件系列(map)

    简介 该头文件包含两个概念相似的容器----map.multimap. 而这两个容器反映的概念就是 映射. 这两个容器 相同 的属性有: 关联性 映射 动态增长 键(Key)唯一性 这两个不相同的属性 ...

  8. C++ 头文件系列(unordered_map、unordered_set)

    简介 很明显,这两个头文件分别是map.set头文件对应的unordered版本. 所以它们有一个重要的性质就是: 乱序 如何乱序 这个unorder暗示着,这两个头文件中类的底层实现----Hash ...

  9. C++ 头文件系列 (algorithm)

    简介 algorithm头文件是C++的标准算法库,它主要应用在容器上. 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性. 因此,任何 ...

随机推荐

  1. POJ3723最小生成树

    题意:从一个起点出发连接男孩子和女孩子,若是两者之间有连接的,则花费为10000-d,若是没有连接的则花费为10000 分析:很显然是一个最小生成树,但是我们希望的是d越大越好,因为d越大,10000 ...

  2. C# GridView Edit & Delete, 点击Delete的时候弹出确认框

    1. 使用GridView自带属性ShowEditButton和ShowDeleteButton,均设为True  <Columns> ... <asp:CommandField S ...

  3. USB那点事3 -使用端口2作为custom HID的传输(转)

    源:USB那点事3 -使用端口2作为custom HID的传输 USB custom HID例子中是使用了端口1作为通信,那么现在我使用端口2作为通信端了,该如何修改呢?如下所示: 首先修改:usb_ ...

  4. 路由器、交换机学习之IP地址、使用网络掩码划分子网

    局域网子网划分 对于C类IP地址来说(192.168.1.X,其中前面的192.168.1为网络号,后面的X为主机号,这样的网络中可以有254台主机,其中.0为局域网地址,.255为广播地址)进行子网 ...

  5. 部分网站允许空白referer的防盗链图片的js破解代码

    Reference: http://www.114390.com/article/27125.htm Javascript源码: 复制代码代码如下: function showImg( url ) { ...

  6. 代码中引用res里的颜色、图片

    1.imageButton userImgButton 在代码中设置图片,使用res/Drawable 里的图片 Resources res = getResources(); Bitmap inDr ...

  7. 反射机制(实例化Class)对象

    反,就是利用对象找到对象的出处 Object类中有一个方法,getClass() Date date = new Date(); System.out.println(date.getClass()) ...

  8. Java解析JSON文件的方法 (二)

    assets文件夹资源的访问        assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件.       1. 先在Activity里面调用g ...

  9. Git Flow——Git团队协作最佳实践

    规范的Git使用 Git是一个很好的版本管理工具,不过相比于传统的版本管理工具,学习成本比较高. 实际开发中,如果团队成员比较多,开发迭代频繁,对Git的应用比较混乱,会产生很多不必要的冲突或者代码丢 ...

  10. Dictionary使用(转)

    1.要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib)2.描述 1).从一组键(Key)到一组值(Value)的 ...