zoukankan      html  css  js  c++  java
  • C++ 头文件系列(ios)

    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 : 分别使数字居中、左对齐、右对齐,其中居中时会根据情况适当的插入填充字符。
  • 相关阅读:
    OSI安全体系结构
    PHP 二维数组根据相同的值进行合并
    Java实现 LeetCode 17 电话号码的字母组合
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 16 最接近的三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 15 三数之和
    Java实现 LeetCode 14 最长公共前缀
  • 原文地址:https://www.cnblogs.com/lgxZJ/p/6400947.html
Copyright © 2011-2022 走看看