【STL】iostream 编程:输出流
本文介绍一下输出流的概念相关的分类并给出示例加深理解。目录1 概述2 详细讲解2.1 ostream控制台输出流基类2.2 ofstream文件输出流2.3 ostringstream内存字符串流3 综述4 示例1 概述输出流对象是字节数据的接受目的地。最重要的三个输出流类分别是 ostream、ofstream 和 ostringstream。ostream 类继承自 basic_ostream提供了几个预定义的全局流对象cout标准输出流cerr标准错误流仅使用有限缓冲clog用途与 cerr 相近采用完整缓冲我们几乎不会手动创建 ostream 实例通常直接使用这些预定义对象。程序启动后你还可以对这些全局流对象重新绑定输出目标。ostream 支持配置为带缓冲或者无缓冲模式最适合顺序式文本输出。它继承了父类 ios 的全部功能。如果手动创建 ostream 对象必须在构造函数中传入一个 streambuf 缓冲区对象。ofstream 类用于向磁盘文件写入数据。如果只需要向文件执行写操作就创建 ofstream 对象。你可以在构造对象时或是调用成员函数 open() 时指定文件以二进制模式还是文本模式打开。ofstream 拥有丰富的格式控制选项与成员函数完整继承了父类 ios 和 ostream 的所有能力。如果你在构造函数里传入文件名文件会随着对象创建自动打开也可以先调用默认构造函数创建对象之后再调用 open() 打开文件。ostringstream 用于把数据输出到内存字符串作用等同于 C 运行时函数 sprintf_s。你可以借助流格式化语法在内存中拼接字符串只需要创建一个 ostringstream 对象即可。2 详细讲解2.1 ostream控制台输出流基类对应屏幕控制台输出只负责终端打印。三个全局对象缓冲区别cout标准输出全缓冲cerr错误信息无缓冲/弱缓冲信息会立刻刷新适合打印报错clog日志流全缓冲积攒数据再批量输出性能更高注不能凭空 new 一个 ostream。流依靠缓冲区工作必须提供 streambuf 才能构造。日常开发只复用全局 cout/cerr/clog不用自己新建。2.2 ofstream文件输出流专门操作本地磁盘文件继承了所有格式化运算符hex、setw、setfill等。特性支持文本模式 / 二进制模式打开文件两种打开方式构造时直接打开或者先创建对象再调用 open()文件关闭依靠对象析构自动完成RALL自动管理资源2.3 ostringstream内存字符串流没有磁盘、没有控制台所有数据都写到内存的 std::string 里面。优势直接复用 流式格式化不用手写 sprintf并且自带内存安全杜绝缓冲区溢出。3 综述继承关系ios→ostream→ofstream文件流完全复用控制台流的所有格式配置代码写法保持统一缓冲区别总结cerr弱缓冲报错信息实时刷新不会滞留缓冲区clog、cout块缓冲积攒一定数据再输出减少系统调用适用场景屏幕打印cout / cerr / clog写入 txt、二进制文件ofstream拼接格式化字符串ostringstream和 C语言接口对比文件写入ofstream↔️FILE*字符串格式化ostringstream↔️sprintf_s4 示例#includesstream#includefstream#includeiostream#includestringintmain(){// 1. ostream 全局控制台流std::cout普通输出\n;std::cerr错误信息\n;// 2. ofstream 文件流std::ofstreamoutfile(test.txt);outfile123 文本内容;// 3. ostringstream 内存字符串流std::ostringstream oss;oss3.14 数字;std::string stross.str();return0;}运行结果

相关新闻