根据前文,ostream类是c++标准输出流的一个基类,本篇详细介绍ostream类的主要成员函数用法。
1.ostream的构造函数
从ostream头文件中截取一部分关于构造函数的声明和定义,如下:
public:
//explicit用来防止由构造函数定义的隐式转换
explicit
basic_ostream(__streambuf_type* __sb)
{
this->init(__sb); }
protected:
basic_ostream()
{
this->init(0); }
#if __cplusplus >= 201103L
// Non-standard constructor that does not call init()
basic_ostream(basic_iostream<_CharT, _Traits>&) {
}
basic_ostream(const basic_ostream&) = delete;
basic_ostream(basic_ostream&& __rhs)
: __ios_type()
{
__ios_type::move(__rhs); }
// 27.7.3.3 Assign/swap
basic_ostream& operator=(const basic_ostream&) = delete;
basic_ostream&
operator=(basic_ostream&& __rhs)
{
swap(__rhs);
return *this;
}
可以看到ostream类的默认构造函数是保护类型,而带参数的构造函数则是公有的,根据public和protected的功能,我们要定义一个ostream对象,必须要在参数中传入streambuf类型的指针才可以,否则会报编译错误。
一个可用的例子如下:
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
filebuf buf;
if ( buf.open("/proc/self/fd/1", ios::out) == nullptr )
{
cerr << "stdout open failed" << endl;
return -1;
}
ostream out(&buf);