c++11 标准模板(STL)(std::basic_ostream)(三)

basic_ostream是C++标准库中的一个类模板,用于提供高级别的输出操作,包括格式化和非格式化的数据输出。它继承自basic_ios,并依赖basic_streambuf进行实际的I/O操作。类的构造函数初始化输出流,而析构函数不处理底层的流缓冲。复制构造函数和复制赋值运算符被删除,因为输出流不可复制,但提供了移动构造函数和移动赋值运算符以支持资源的转移。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

定义于头文件 <ostream>
template<

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

> class basic_ostream : virtual public std::basic_ios<CharT, Traits>

类模板 basic_ostream 提供字符流上的高层输出操作。受支持操作包含有格式输出(例如整数值)和无格式输出(例如生字符和字符数组)。此功能以 basic_streambuf 类所提供的接口实现,通过 basic_ios 基类访问。典型的实现中, basic_ostream 无非继承的数据成员。

 

成员函数

构造对象

std::basic_ostream<CharT,Traits>::basic_ostream

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

(1)

protected:
basic_ostream( const basic_ostream& rhs ) = delete;

(2)(C++11 起)

protected:
basic_ostream( basic_ostream&& rhs );

(3)(C++11 起)

 1) 构造 basic_ostream 对象,通过调用 basic_ios::init(sb) 赋初值给基类。

2) 复制构造函数被删除。输出流不可复制。

3) 移动构造函数用 basic_ios<CharT, Traits>::move(rhs)rhs 移动所有 basic_ios ,除了 rdbuf()*this 中。此移动构造函数受保护:它为可移动输出流类 std::basic_ofstream 和 std::basic_ostringstream 的移动构造函数所调用,它们知道如何正确地移动关联的流缓冲。

参数

sb-用作输出序列的流缓冲
rhs-初始化来源的 basic_ostream

析构对象

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

virtual ~basic_ostream();

销毁 basic_ostream 对象。此析构函数不进行底层流缓冲( rdbuf() )上的任何操作:导出输出流,如 std::basic_ofstream 与 std::basic_ostringstream 的析构函数负责调用流缓冲的析构函数。

调用示例

#include <sstream>
#include <iostream>

void add_words(std::streambuf* p)
{
    std::ostream buf(p); // buf 与 s 共享缓冲
    buf << " is the answer";
} // 调用 buf 的析构函数。 p 保持不受影响。

int main()
{
    std::ostringstream s;
    s << 42;
    add_words(s.rdbuf());
    s << ".";
    std::cout << s.str() << '\n';
}
 输出

从另一 basic_ostream 移动赋值

std::basic_ostream<CharT,Traits>::operator=

 1) 复制赋值运算符为被保护,企鹅杯删除。输出流不可复制赋值 (CopyAssignable) 。

2) 移动赋值运算符如同以调用 swap(*rhs) 与 rhs 交换基类的所有数据成员,除了 rdbuf() 。此移动赋值运算符为受保护:它只为导出可移动输出流类 std::basic_ofstream 和 std::basic_ostringstream 的移动赋值运算符所调用,它们知道如何正确移动赋值关联的流缓冲。

参数

rhs-要赋值给 *this 的 basic_ostream 对象

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值