C++/ios

维基教科书,自由的教学读本
< C++

iosw:C++标准程式库中的一个w:头文件,定义了C++标准中的流输入输出的基本类模板std::ios_base与std::basic_ios。


ios_base模板类[编辑]

ios_base是basic_ios类模版的基类,构造函数是私有的。

格式化函数[编辑]

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

本地化函数[编辑]

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

有关internal array的函数[编辑]

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

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

事件支持[编辑]

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

  • event枚举类
    • copyfmt_event : 当调用copyfmt时发生。
    • erase_event : 当stream的析构器被调用时。
    • imbue_event : 当调用ios_base::imbue时。
  • event_callback类型:ios_base以回调函数的形式来支持事件。 回调函数必须满足以下类型void (*event_callback) (event en, ios_base& obj, int index); 其中obj是触发事件的stream对象,index是注册回调函数时的传入的index参数。
  • 注册事件回调函数
    • register_callback

其他函数[编辑]

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

其他成员类型[编辑]

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

其他成员类[编辑]

  • failure : 继承自std::exception的异常类,用来作为输入输出流的基本异常类。出于兼容性考虑,这个抛异常的开关没有打开。STL提供了ios::exceptions()函数来打开这个开关
  • Init : 八个标准流实例化的控制器。

basic_ios类模板[编辑]

成员类型[编辑]

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

构造器[编辑]

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

状态标记函数[编辑]

std::basic_ios<CharT,Traits>下定义了四个状态标记位:good、eof、fail、bad。可以用下述成员函数访问这些状态标记位:

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

格式化函数[编辑]

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

其他函数[编辑]

  • 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类型字符(通常是宽字符)。

错误报告[编辑]

io_errc 枚举类[编辑]

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

make_error_code函数[编辑]

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

iostream_category函数[编辑]

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

无参Manipulators函数[编辑]

  • boolalpha : 将bool变量字符化(包括输入输出),即1->true,0->false。
  • showbase : 输出时,显示数字的前置基数,即十六进制->0x, 八进制->0, 十进制无前置基数。
  • showpoint : 显示浮点数的小数点。
  • showpos : 显示正整数的“+”号。
  • skipws : 跳过所有前置的white-space。
  • unitbuf : 每次向流插入内容时,输出缓冲区的内容。
  • uppercase : 所有小写字母都用大写替代。
  • dec、hex、oct : 分别用十进制、十六进制、八进制来表示整数。
  • std::fixed, std::scientific, std::hexfloat, std::defaultfloat : 分别用固定点小数法、科学计数法来表示浮点数。
  • internal、left、right : 分别使数字居中、左对齐、右对齐,其中居中时会根据情况适当的插入填充字符。
  • get_money: parses a monetary value
  • put_money: formats and outputs a monetary value
  • get_time: parses a date/time value of specified format
  • put_time: formats and outputs a date/time value according to the specified format
  • quoted: inserts and extracts quoted strings with embedded spaces

参考文献[编辑]