c++11 标准模板(STL)(std::basic_ios)(二)

定义于头文件 <ios>

template<

    class CharT,
    class Traits = std::char_traits<CharT>

> class basic_ios : public std::ios_base

类 std::basic_ios 提供设施,以对拥有 std::basic_streambuf 接口的对象赋予接口。数个 std::basic_ios 对象能指涉一个实际的 std::basic_streambuf 对象。

继承图

还提供了两个对常见的字符类型的特化:

类型定义
iosbasic_ios<char>
wiosbasic_ios<wchar_t>

公开成员函数

 构造对象

std::basic_ios<CharT,Traits>::basic_ios

protected:
basic_ios();

(1)

public:
explicit basic_ios( std::basic_streambuf<CharT,Traits>* sb );

(2)

private:
basic_ios(const basic_ios&);

(3)(C++11 前)

public:
basic_ios(const basic_ios& ) = delete;

(C++11 起)

构造新的 basic_ios 对象。

1) 默认构造函数。不初始化内部状态。必须在首次使用对象或析构函数前调用 init() ,否则行为未定义。

2) 以调用init(sb) 初始化内部状态。设置关联流缓冲为 sb

3) C++11 前复制构造函数声明为 private: 且不定义,而在 C++11 中声明为被删除: I/O 流非可复制构造 (CopyConstructible) 。

参数

sb-要关联的流缓冲

 

析构对象

std::basic_ios<CharT,Traits>::~basic_ios

virtual ~basic_ios();

销毁 basic_ios 对象。不进行 rdbuf 上的操作,不销毁它。

注意

此析构函数为 virtual ,因为其基类析构函数 ios_base::~ios_base 为虚。

复制赋值运算符被删除

operator=

受保护成员函数

初始化一个默认构造的std::basic_ios

std::basic_ios<CharT,Traits>::init

protected:
void init( std::basic_streambuf<CharT,Traits>* sb );

设置关联流缓冲为 sb 并初始化内部状态。

后置条件如下:

元素
rdbuf()sb
tie()空指针
rdstate()sb 不是空指针, 则为 goodbit ,否则为 badbit
exceptions()goodbit
flags()skipws | dec
width()​0​
precision()6
fill()widen(' ')
getloc()std::locale() 所返回的值的副本

此成员函数为受保护:一旦知晓实际缓冲区类型,则它为派生流类 std::basic_istream 和 std::basic_ostream 的构造函数所调用。直至调用此函数前,默认构造的 std::basic_ios 每个成员函数(包括析构函数)都引发未定义行为。注意 basic_ios 是虚基类,从而其构造函数不为直接派生类的构造函数所调用,此乃二阶段初始化为必须的原因。

参数

sb-要关联到的流缓冲

 

从另一 std::basic_ios 移动,除了 rdbuf

std::basic_ios<CharT,Traits>::move

protected:
void move( basic_ios& other );

(C++11 起)

protected:
void move( basic_ios&& other );

(C++11 起)

other 的状态替换当前状态,除了关联的 rdbuf 。调用后 other 在合法,但未指定的状态。调用此函数后, rdbuf() 返回 NULL ,而 other.rdbuf() 返回与调用前相同的值,且 other.tie() 返回 0 。

此成员函数受保护:它为导出流类 std::basic_ostream 和 std::basic_istream 的受保护移动构造函数所调用,进而为进一步导出流类,如 std::basic_ofstream 的公开移动构造函数所调用,它们知道如何正确地移动关联流缓冲。

参数

other-转移状态来源的 basic_ios 对象

返回值

(无)

与另一 std::basic_ios 交换,除了 rdbuf

std::basic_ios<CharT,Traits>::swap

protected:
void swap( basic_ios& other ) noexcept;

(C++11 起)

交换 *this 与 other 的状态,除了关联的 rdbuf 对象。 rdbuf() 和 other.rdbuf() 返回与调用前相同的值。

此 swap 函数受保护:它为导出的流类,如 std::basic_ofstream 或 std::basic_istringstream 的成员函数所调用,它们知道如何正确地交换关联的流缓冲。

参数

other-要与之交换状态的 basic_ios 对象

返回值

(无)

替换 rdbuf 而不清除其错误状态

std::basic_ios<CharT,Traits>::set_rdbuf

protected:
void set_rdbuf( std::basic_streambuf<CharT,Traits>* sb );

设置关联流缓冲为 sb 而不清除错误状态。

此成员函数受保护:它为导出流,如 std::basic_ofstream 或 std::basic_istringstream 的移动构造函数所调用,作为构造基类和移动流缓冲后的最终步骤:只有最终导出流类知道如何正确移动流缓冲,但需要令 std::basic_ios 意识到流的新位置,使得其公开成员函数能访问它。

参数

sb-要访问的流缓冲

返回值

(无)

异常

(无)

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值