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

定义于头文件

template<

    class CharT,
    class Traits = std::char_traits

> class basic_ios : public std::ios_base

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

继承图

c++11 标准模板(STL)(std::basic_ios)(二)_第1张图片

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

类型 定义
ios basic_ios
wios basic_ios

公开成员函数

 构造对象

std::basic_ios::basic_ios

protected:
basic_ios();

(1)

public:
explicit basic_ios( std::basic_streambuf* 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::~basic_ios

virtual ~basic_ios();

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

注意

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

复制赋值运算符被删除

operator=

受保护成员函数

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

std::basic_ios::init

protected:
void init( std::basic_streambuf* 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::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::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::set_rdbuf

protected:
void set_rdbuf( std::basic_streambuf* sb );

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

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

参数

sb - 要访问的流缓冲

返回值

(无)

异常

(无)

 

你可能感兴趣的:(c++,basic_ios,标准库模板,管理任意流缓冲,成员函数)