【STL】iostream 编程:构造输出流对象

本文介绍如何构造输出流对象。


目录

  • 1 概述
  • 2 文件输出流的构造方式
  • 3 字符串输出流的构造方式
  • 4 综述

1 概述

如果只使用系统预定义的 cout、cerr、clog,不需要手动构造输出流。
只有下面两种场景才需要调用构造函数:

  • 构造文件输出流对象;
  • 构造字符串输出流对象;

2 文件输出流的构造方式

有两种写法创建文件输出流 ofstream:

  1. 方式1:先调用默认构造创建对象,再调用 open 打开文件
ofstream myFile;// 栈上对象myFile.open("filename");ofstream*pmyFile=newofstream;// 堆上动态对象pmyFile->open("filename");
  1. 方式2:在构造函数中直接传入文件名与打开模式标志
ofstreammyFile("filename",ios_base::out);

3 字符串输出流的构造方式

使用 ostringstream 构造内存输出流:

usingnamespacestd;ostringstream myString;myString<<"this is a test"<<ends;string sp=myString.str();// 获取最终字符串cout<<sp<<endl;

操作符 ends 会在字符串末尾追加字符串结束符 \0;

4 综述

  1. RALL 特性
    • ofstream 对象析构时会自动关闭文件句柄,不需要手动调用 close()。
  2. 打开模式默认值
    • 不写第二个参数时,ofstream 默认就是 ios_base::out(只写模式)。
  3. ends 与 endl 的区别
    • ends:仅写入 \0,不刷新缓冲区;
    • endl:写入换行并强制刷新缓冲区;
  4. 获取结果
    • ostringstream.str() 会把缓冲区内容复制为一个 std::string。