C/C++编程:输入输出流类模板std::basic_iostream

梦里梦外; 2023-05-22 06:55 36阅读 0赞
  1. template< class CharT, class Traits = std::char_traits<CharT>>
  2. class basic_iostream;

作用:包装给定的抽象设备(std::basic_streambuf)并提供高层输入/输出接口
此功能为 basic_streambuf 类所提供,在接口上实现。通过 basic_ios 类访问缓冲区。
在这里插入图片描述

模板实例化


















类型 定义
iostream basic_iostream
wiostream basic_iostream<wchar_t>

成员函数

std::basic_iostream::basic_iostream

  1. explicit basic_iostream( std::basic_streambuf<CharT,Traits>* sb ); (1)
  2. basic_iostream( const basic_iostream& other ) = delete; (2) (C++11 起)
  3. protected:
  4. basic_iostream( basic_iostream&& other ); (3) (C++11 起)

构造新的流对象。

  1. 以 streambuf sb 初始化。基类初始化为 basic_istream(sb) 和 basic_ostream(sb) 。调用后 rdbuf() == sb 而 gcount() == 0
  2. 不允许复制构造。
  3. 移动构造函数:
  • 移动构造第一基类 basic_istream 为 basic_istream(std::move(rhs)); ,这会继续移动构造并初始化虚基类 std::basic_ios 。
  • 另一基类 basic_ostream 的初始化是实现定义的(例如,可以添加不做任何事的受保护默认构造函数到 std::basic_ostream ),因为移动构造不能使用 rhs 二次。
  • 此移动构造函数受保护:它为导出流类 std::basic_fstream 和 std::basic_stringstream 的移动构造函数在它们移动并关联流缓冲前调用。

参数

  • sb - 用以初始化的 streambuf
  • other - 用以初始化的另一流

std::basic_iostream::~basic_iostream

  1. virtual ~basic_iostream();

析构输入/输出流

  • 此析构函数不在底层流缓冲( rdbuf() )上进行任何操作
  • 导出流,如 std::basic_fstream 和 std::basic_stringstream 的析构函数负责调用流缓冲的析构函数。

其他

C++ 包含两个输入/输出库:现代的、基于流的 I/O 库和 C 风格 I/O 函数的标准集合。

基于流的IO库围绕抽象的输入/输出设备组织。这些抽象设备允许相同代码处理对文件、内存流或者随即进行任意操作的自定义设备其的输出如出错

基于流的输入/输出库围绕抽象的输入/输出设备组织。这些抽象设备允许相同代码处理对文件、内存流或随即进行任意操作(例如压缩)的自定义适配器设备的输入/输出。

大多数已经被类模板化,故它们能被适配到任何标准字符类型。为最常用的基本字符类型( char 和 wchar_t )提供分离的 typedef 。以下列层次将类组织:
在这里插入图片描述

抽象


































ios_base 管理格式化标志和输入/输出异常(类)
basic_ios 管理任意流缓冲(类模板)
basic_streambuf 抽象原生设备(类模板)
basic_ostream 包装给定的抽象设备(std::basic_streambuf)并提供高层输出接口(类模板)
basic_istream 包装给定的抽象设备(std::basic_streambuf)并提供高层输入接口(类模板)
basic_iostream 包装给定的抽象设备(std::basic_streambuf)

发表评论

表情:
评论列表 (有 0 条评论,36人围观)

还没有评论,来说两句吧...

相关阅读