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

1059 篇文章 286 订阅
template< class CharT, class Traits = std::char_traits<CharT>>
class basic_iostream;

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

模板实例化

类型定义
iostreambasic_iostream
wiostreambasic_iostream<wchar_t>

成员函数

std::basic_iostream::basic_iostream

explicit basic_iostream( std::basic_streambuf<CharT,Traits>* sb );   (1)	

basic_iostream( const basic_iostream& other ) = delete;              (2)	(C++11)

protected:
basic_iostream( basic_iostream&& other );                            (3)	(C++11)

构造新的流对象。

  1. 以 streambuf sb 初始化。基类初始化为 basic_istream<CharT,Traits>(sb) 和 basic_ostream<CharT,Traits>(sb) 。调用后 rdbuf() == sb 而 gcount() == 0
  2. 不允许复制构造。
  3. 移动构造函数:
  • 移动构造第一基类 basic_istream 为 basic_istream<CharT,Traits>(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

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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值