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. Extjs4中的常用组件:Grid、Tree和Form

    至此我们已经学习了Data包和布局等API.下面我们来学习作为Extjs框架中我们用得最多的用来展现数据的Grid.Tree和Form吧! 目录: 5.1. Grid panel 5.1.1. Col ...

  2. double和real型有什么区别 [

    DOUBLE是双精度浮点数REAL  是实数类型,他包括 DOUBLE,SINGLE等类型

  3. 蓝牙协议 基于TI cc2540 模块的理解(转)

    源:蓝牙协议 基于TI cc2540 模块的理解 Bluetooth 4.0开发 Platform:TI IC:cc2540 Environment:windows 7 tools:IAR 8.20. ...

  4. IOS开发-UI学习-使用代码创建button

    使用代码创建button分5个步骤,分别是: 1.定义一个按钮,根据定义位置不同可定义为局部变量或者全局变量: 2.初始化按钮,一般使用一个矩形初始化: 3.设置按钮控件的其他属性,如背景图片,或者背 ...

  5. 计时器chronometer补充

    项目中要实现关于安卓控件chronometer这部分的功能需求: 1.计时器的功能对用户答题时间进行时间统计,用户答完该题,进入下一题,计时器接续上一题的结束时间继续计时: 2.用户可以跳出答题界面, ...

  6. Python3基础 pop() 删除 键为指定值的项

    镇场诗: 诚听如来语,顿舍世间名与利.愿做地藏徒,广演是经阎浮提. 愿尽吾所学,成就一良心博客.愿诸后来人,重现智慧清净体.-------------------------------------- ...

  7. Grid (read-only) objects and methods (client-side reference)获取子表单对象的一些方法 Crm 2016

    https://msdn.microsoft.com/en-us/library/dn932126.aspx#BKMK_GridControl Updated: November 29, 2016 A ...

  8. PHP生成带有干扰线的验证码,干扰点、字符倾斜

    PHP生成验证码的类代码,本验证码类支持生成干扰点.干扰线等干扰像素,还可以使字符倾斜.在类中你可以定义验证码宽度.高度.长度.倾斜角度等参数,后附有用法: <?php class class_ ...

  9. 一 APPIUM基本理论知识

    1.APPIUM介绍 Appium 是一个自动化测试开源工具,支持 iOS 平台和 Android 平台上的原生应用,web 应用和混合应用.所谓的“移动原生应用”是指那些用 iOS SDK 或者 A ...

  10. html5、css3及响应式设计入门

    一.响应式设计的定义 将三种已有的开发技巧(弹性网格布局.弹性图片.媒体和媒体查询)整合起来,命名为响应式网页设计.真正的响应式设计方法不仅仅只是根据视口大小改变网页布局.相反,它是要从整体上颠覆我们 ...