1 简介

我们都知道,平时常用的那些标准流,诸如iostream、ofstream、ifstream等等,其实都是对应的basic_XXX模版的实例类。 而这些basic_XXX类模版又都是继承自同一个基类模版----basic_ios

2 basic_ios模版

定义这个基类模版应该是出于可重用的目的。

2.1 成员类型

  • char_type : 字符类型,即第一个模版参数。
  • char_traits : 萃取器,即第二个模版参数(默认为位于< string >头文件内的char_traits萃取器)。

2.2 构造器

该模版的构造函数只需要两个类型:charT、traits。 一个是字符类型,另一个是字符萃取器,两者都只和字符有关。

2.3 状态标记函数

  • good : 检测流状态是否为good。
  • eof : 检测end-of-file 标记位是否被置为1,即是否到文件末尾
  • fail : 检测 fail标记位 或者 bad标记位是否被置为1,即先前是否有操作失败
  • bad : 检测bad 标记位是否被置为1, 即先前是否有操作导致了严重错误(致使流的完整性遭到破坏)。
  • operator !、operator bool : 检测流的状态是否正常,即是否有操作失败或导致了严重错误(fail or bad)。
  • rdstate、setstate : 返回或者设置所有状态标记位。
  • clear : 清楚状态标记位。

2.4 格式化函数

  • coptfmt : 将给定的basic_ios对象的内部格式copy给自身。
  • fill : 返回、设置填充字符(当设定的宽度大于实际输出宽度时,才会出现填充情况)。

2.5 其他函数

  • exceptions : 返回、设置异常掩码(设置之后,对应的状态标记位被置1时,会抛出异常)。
  • imbue : 将locale灌输进流,这个调用会触发imbue_event事件。
  • tie : 返回先前的关联输出流、设置新的关联输出流。"The tied stream is an output stream object which is flushed before each i/o operation in this stream object." 也就是说,每次自身的输入输出操作发生前,该tied的流都回把缓冲区的内容输出。 默认情况下,标准cin和cerr流与cout相关连,所以每次在键盘输入时,“黑框”都回把输入显示出来。
  • rdbuf : 返回、设置basic_ios内部的stream buffer。
  • narrow : 将传入字符(通常是宽字符)窄化(narrow)成自身模版类的char_type类型字符。
  • widen : 将传入字符宽化(widen)成自身模版类的char_type类型字符(通常是宽字符)。

3 ios_base类

这个类很特殊,它是basic_ios类模版的基类,并且它的构造函数是私有的。 这就意味着它在设计之初就是内部使用,只用于派生,不能被用户声明使用。

3.1 格式化函数

  • flags : 返回或者重新设置所有格式标记符。
  • setf : 设置特定类别的格式标记符。
  • unsetf : 清除特定的格式标记符。
  • precision : 设置浮点数精度
  • width : 设置域宽

3.2 本地化函数

  • imbue : “灌入”区域设置。
  • getloc : 返回当前区域设置。

3.3 有关internal array的函数

该类内部维护了一个internal extensible array作为通用数组,并且定义了三个公有函数帮助用户使用它们。

  • xalloc(静态) : 返回一个extensible array的新下标。
  • iword : 返回数组中对应给定下标的long元素。
  • pword : 返回数组中给定下标对应的元素指针(void*)。

3.4 事件支持

ios_base支持事件这一概念,但只支持有限的事件。

3.4.1 event枚举类

  • copyfmt_event : 当调用copyfmt时发生。
  • erase_event : 当stream的析构器被调用时。
  • imbue_event : 当调用ios_base::imbue时。

3.4.2 event_callback类型

ios_base以回调函数的形式来支持事件。 回调函数必须满足以下类型void (*event_callback) (event en, ios_base& obj, int index); 其中obj是触发事件的stream对象,index是注册回调函数时的传入的index参数。

3.4.3 注册事件回调函数

  • register_callback

3.5 其他

3.5.1 其他函数

  • sync_with_stdio(静态) : 是否同步C++输入输出流和C输入输出对象(stdin、stdout、stderr)。

3.5.2 其他成员类型

  • fmtflags : 流格式化标记符类型。
  • iostate : 流状态标记符类型。
  • openmode : 流打开模式标记符类型。
  • seekdir : 流定位方向标记符类型。

3.5.3 其他成员类

  • failure : 继承自std::exception的异常类,用来作为输入输出流的基本异常类。
  • Init : 八个标准流实例化的控制器

4 Error Reporting

该头文件也提供了一定的错误处理功能。

4.1 io_errc 枚举类

这个枚举类定义了input/output 的错误情况。 C++标准只要求该枚举类定义stream枚举,但具体的库可以自己实现额外的枚举。

4.2 make_error_code函数

该函数从给定的io_errc枚举构建出错误码(error_code对象)。

4.3 make_error_condition函数

该函数从给定的io_errc枚举构建出错误情况(error_condition对象)。

4.4 iostream_category函数

返回一个error_category对象,该对象类型与io_errc枚举类对应的error_condition的错误类别相关联。

5 Manipulators(全局函数)

  • boolalpha : 将bool变量字符化(包括输入输出),即1->true,0->false。
  • showbase : 输出时,显示数字的前置基数,即十六进制->0x, 八进制->0, 十进制无前置基数。
  • showpoint : 显示浮点数的小数点。
  • showpos : 显示正整数的“+”号。
  • skipws : 跳过所有前置的white-space。
  • unitbuf : 每次向流插入内容时,输出缓冲区的内容。
  • uppercase : 所有小写字母都用大写替代。
  • dec、hex、oct : 分别用十进制、十六进制、八进制来表示整数。
  • fixed、scientific : 分别用固定点小数法、科学计数法来表示浮点数。
  • internal、left、right : 分别使数字居中、左对齐、右对齐,其中居中时会根据情况适当的插入填充字符。

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

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

    1. 简介 该头文件定义了一些参数化的操纵器(manipulatators),注意ios头文件也定义了一些. 2. maniapulators 2.1 C++98 resetiosflags : 重置 ...

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. WeakHashMap和Java引用类型详细解析

    WeakHashMap是种弱引用的HashMap,这是说,WeakHashMap里的key值如果没有外部强引用,在垃圾回收之后,WeakHashMap的对应内容也会被移除掉. 1.1 Java的引用类 ...

  2. bzoj-4318 OSU! 【数学期望】

    Description osu 是一款群众喜闻乐见的休闲软件.  我们可以把osu的规则简化与改编成以下的样子:  一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1 ...

  3. BZOJ2733 [HNOI2012]永无乡 【线段树合并】

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  4. Linux文件锁学习-flock, lockf, fcntl

    参考  linux中fcntl().lockf.flock的区别 这三个函数的作用都是给文件加锁,那它们有什么区别呢? 首先flock和fcntl是系统调用,而lockf是库函数.lockf实际上是f ...

  5. Eclipse发布Maven项目到远程服务器

    pom.xml中的配置依赖有两种: 一.tomcat-maven.plugin <plugin> <groupId>org.codehaus.mojo</groupId& ...

  6. mysql server的安装和配置

    YSQL-5.7.9.1解压版 例如我的在D:\Program Files\MySQL\MySQL Server 5.7(解压时名字mysql-installer-community-5.7.9.1可 ...

  7. Java的进制转换操作(十进制、十六进制、二进制)

    2014-05-06 17:34 吴文付 最近由于工作上的需要,遇到进制转换的问题.涉及到的进制主要是 十进制,十六进制,二进制中间的转换. 这里整理一下.具体的计划为:封装一个转换类,一个测试类. ...

  8. 实时 Django 终于来了 —— Django Channels 入门指南

    Reference: http://www.oschina.net/translate/in_deep_with_django_channels_the_future_of_real_time_app ...

  9. 【腾讯优测干货分享】微信小程序之自动化亲密接触

    本文来自于腾讯优测公众号(wxutest),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/HcPakz5CV1SHnu-U8n85pw 导语 山雨欲来风满楼,最 ...

  10. magento中文语言包的使用

    magento中文语言包的使用,我们在百度上随便就能找到一大堆. 由于本人今天是第一次使用magento,找到目录magento/app/locale  并且用语言包中的locale文件夹替换掉mag ...