C++:ostream 和 ostringstream 有什么区别?

2024-05-01

ostream 和 ostringstream 有什么区别?你什么时候会使用其中一种而不是另一种?


简单地说:ostringstream提供了一个streambuf, ostream要求用户提供一份。

要理解其中的含义,有必要了解一点 流是如何工作的,我不确定网络上对此有很好的解释。基本抽象 的ostream正在格式化文本输出。你给它一个int or a double(或者用户定义的类型——稍后会详细介绍),并且它 将其转换为类型的字符流char。它能做什么 该流取决于streambuf附在其上的; 这是策略模式的一个示例,其中streambuf是一个 策略的抽象基类[1]。该标准提供了两种 的实施streambuf, filebuf and stringbuf;在实践中, 在除了最琐碎的应用程序之外的所有应用程序中,您可能会遇到一些 你自己实现。

输出时,总是使用ostream;这是一个类<<定义了运算符。您正在将数据格式化为流 字符,并且您并不真正关心流的最终位置。

创建实例时:如果创建ostream,您必须提供 它与一个streambuf你自己。更多时候,您将创建一个ofstream or an ostringstream。这些都是“便利”课程, 其源自ostream,并提供一个streambuf为了它 (filebuf and stringbuf, 当它发生的时候)。实际上,all他们所做的是 提供必要的streambuf(这会影响构造函数和 析构函数,而不是其他);如果是ofstream, 那里 还有一些额外的功能,它们转发到附加功能 这filebuf界面。

当您定义自己的时,这是常见的(但绝不是必需的)streambuf提供方便的超载ostream (and istream,如果相关的话),与ofstream or ostringstream.

出于同样的原因,在创建实例时,通常会使用以下之一 “方便”派生类,而不是使用ostream直接地 并提供您自己的streambuf。

如果这一切看起来很复杂:iostream 类只使用 关于 C++ 的所有功能(虚拟函数、模板和 函数重载都发挥着重要作用)。如果你只是 学习 C++,不用太担心:只需使用ofstream or ostringstream当你构造一个实例,但传递 参考ostream。当您了解虚拟技术等技术时 函数、模板和运算符重载,返回到 iostreams 了解它们在使代码更加灵活方面发挥的作用。


[1] 由于种种原因,std::streambuf实际上并不抽象。但 其中的虚函数的实现是没有用的; 提取总是返回 EOF,而插入总是失败。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:ostream 和 ostringstream 有什么区别? 的相关文章

  • 测试 hdf5/c++ 中的组是否存在

    我正在打开一个现有的 HDF5 文件来附加数据 我想向那个叫做的小组保证 A存在以供后续访问 我正在寻找一种简单的方法来创建 A有条件地 如果不存在则创建并返回新组 或者返回现有组 一种方法是测试 A存在 我怎样才能高效地做到这一点 根据
  • 为什么C Clock()返回0

    我有这样的事情 clock t start end start clock something else end clock printf nClock cycles are d d n start end 我总是得到输出 时钟周期是 0
  • 在 Windows Phone 上启动 pdf 文件时出现 System.Runtime.InteropServices.COMException

    我正在尝试使用我之前在另一个应用程序上使用过的以下工作代码打开 pdf 文件 但这一次 当流程到达此行时 我收到 System Runtime InteropServices COMException Windows System Laun
  • 当我单击 GridView 项时返回 ImageView 实例

    当我点击GridView项时如何返回ImageView实例 我为 ItemClick 创建自定义绑定事件 public class ItemClickSquareBinding MvxBaseAndroidTargetBinding pri
  • 阅读 Stack Overflow RSS 源

    我正在尝试获取未回答问题的列表the feed https stackoverflow com feeds 但我在阅读时遇到困难 const string RECENT QUESTIONS https stackoverflow com f
  • C++ 在 Vector 中使用不可分配的对象

    我想将对象列表存储在std vector 但对象包含引用且无法分配给 但是 我可以复制构造该对象 我能想到的唯一选择是使用指针来包装对象并在需要分配指针时重新设置指针 但这样做的语法会显着降低可读性 特别是在使用迭代器时 我更喜欢另一种选择
  • 组合 Datepicker 和 Timepicker 值 Win 8.1

    我试图同时使用 Datepicker Timepicker 来返回可以存储在数据库中的 DateTime 例如 我想要安排会议的开始日期和结束日期 如果适用 我将如何将这些值组合成 SQL 数据库可以处理的正确格式 任何反馈都会很棒 我让这
  • 捕获当前正在播放的声音

    是否可以捕获计算机上当前播放的声音 如果能够将其保存为 mp3 就好了 但我认为这样做会存在一些法律问题 所以 wav 也可以 我环顾四周 有人建议使用虚拟音频线之类的东西 在 C 中捕获声音输出 https stackoverflow c
  • _mm_max_ss 在 clang 和 gcc 之间有不同的行为

    我正在尝试使用 clang 和 gcc 交叉编译一个项目 但在使用时发现一些奇怪的差异 mm max ss e g m128 a mm set ss std numeric limits
  • 在生产者-消费者情况下使用条件变量

    我正在尝试了解条件变量以及如何在生产者 消费者情况下使用它 我有一个队列 其中一个线程将数字推入队列 而另一个线程从队列中弹出数字 当生产线程放置一些数据时 我想使用条件变量向消费线程发出信号 问题是有时 或大多数时候 它只将最多两个项目推
  • 为什么以下代码不允许我使用 fgets 获取用户输入但可以使用 scanf?

    这是一个更大程序的简短摘录 但该程序的其余部分无关紧要 因为我认为我能够隔离该问题 我怀疑这与我使用 fgets 的方式有关 我读过 最好使用 fgets 而不是 scanf 但我似乎无法让它在这里正常工作 当我使用以下代码时 程序不会给我
  • 在 C# 中赋值后如何保留有关对象的信息?

    我一直在问我的想法可能是解决方案 https stackoverflow com questions 35254467 is it possible in c sharp to get the attributes attached to
  • 如何使用 Clang 查找内存泄漏

    我在我的机器 ubuntu 中安装了 Clang 以便发现我的 C 代码中的内存泄漏 我编写了一个示例代码来检查它的工作情况 如下所示 File hello c for leak detection include
  • 如何从枚举中选择随机值?

    给定 C 中的任意枚举 如何选择随机值 我没有找到这个非常基本的问题 我会在一分钟内发布我的答案作为任何人的参考 但请随意发布你自己的答案 Array values Enum GetValues typeof Bar Random rand
  • 为什么我不能在扩展 List 的类中调用 OrderBy?

    我有一堂课 Deck 其中包含一个名为的方法Shuffle 我正在致力于重构Deck延长List
  • 删除对象时指针自动指向空

    假设我有一个对象和其他几个不同类类型的对象中的 10 个指向它的指针 如果对象被删除 这些指针必须设置为空 通常我会将对象的类与具有指向它的指针的类互连 以便它可以通知它们它正在被删除 并且它们可以将它们的指针设置为空 但这也有一个负担 即
  • 如何使用 g++ 在 c++ 20 中使用模块?

    我读了这个链接https gcc gnu org wiki cxx modules https gcc gnu org wiki cxx modules并尝试从该网站复制以下示例 我已经知道这个编译器部分支持模块系统 注 我用的是windo
  • 有没有办法让 VS2010 在我的方法中扩展或收缩 try 块?

    我的代码有很多 try catch finally 块 与我在 VS2010 中的方法不同 除了添加区域之外 我无法在开发时扩展或收缩这些区域来隐藏内容 try vm R vm Qu vm T vm D vm Fil vm Type vm
  • 局部静态变量初始化是线程安全的[重复]

    这个问题在这里已经有答案了 假设我有一个包含三个静态函数的类 如下所示 include
  • 最后从同一类中的其他构造函数调用构造函数

    我在这里读到可以调用另一个构造函数从同一类中的另一个构造函数调用构造函数 https stackoverflow com questions 829870 calling constructor from other constructor

随机推荐

  • 无需使用abs函数或if语句即可获取绝对值

    我在想如何在不使用的情况下获得整数的绝对值if声明也不abs 起初我使用的是左移位 lt lt 试图将负号移出范围 然后将位右移回原来的位置 但不幸的是它对我不起作用 请让我知道为什么它不起作用以及其他替代方法 From 位摆弄黑客 htt
  • NSMutableAttributedString 的自动换行

    我有 NSMutableAttributedString 并且字符串很长 我想在 UIlabel 上显示它时进行自动换行 如果是 NSString 我会继续做这样的事情 动态 UILabel 截断文本 https stackoverflow
  • C++:如何通过时间和本地时间获取实际时间?

    我正在寻找一种在 C 中以 HH MM SS 方式节省时间的方法 我在这里看到它们有很多解决方案 经过一番研究后我选择了time and localtime 然而 似乎localtime函数有点棘手 因为它says http rabbit
  • 如何编写javadoc链接?

    如何将链接写入 javadoc 目前 我有类似的东西 link java lang Math sqrt double Math sqrt 生成文本Math sqrt应该链接到java lang Math sqrt double 然而 API
  • Kafka中如何使用事务以及如何使用abortTransaction?

    我是 kafka 新手 我使用 Kafka Producer Java api 面对Kafka的这个问题 Kafka Invalid transition attempted from state COMMITTING TRANSACTIO
  • 读取pkcs12证书信息

    我在读取证书信息时遇到问题 我想以编程方式在 Android 中使用 java 和 bouncycastle 库来阅读完整信息 现在 我只是在控制台中使用 keytool 命令 gt keytool list keystore 1 p12
  • R: Knit 给出 SQL-chunk 错误

    我想编织 R markdown 的输出 其中包括几个 SQL 块 但是 如果我开始编织 就会收到错误消息 Line 65 Error in eval expr envir enclos object pp dataset not found
  • 使用 OOP 开发 WordPress 插件

    我是插件开发的新手 所以 凡是我说得不对的地方 请大家指正 我有一个网站需要一个具有以下需求的播放器插件 管理员可控的玩家注册表单 其中包含一些详细信息 显示所有注册玩家的列表页面 已注册的玩家可以删除并相互比较 在前端的 WordPres
  • 当 Bool 变量变为 True 时更改标签

    我不太确定如何解释这一点 我将把代码放在伪代码中以便于阅读 我几乎想要一个标签在类的 bool 变量更改时更改其文本 我不确定我需要使用什么 因为我使用的是 WPF 并且该类不能只更改我不更改的标签你不觉得吗 我需要举办某种活动吗 或者 W
  • android 2.2 谷歌地图错误

    我使用 google map api 开发了一个在 android 2 1 上运行良好的项目 但是当我在 android 2 2 上运行相同的项目时 它遇到了一些错误 显示的错误是 Android运行时致命异常 main AndroidRu
  • 无法绑定到“*ngIf”,因为它不是 angular2 中“td”的已知属性

    在我的 Angular 2 应用程序中 在 ts 文件中 我在下面点击了偶数 ViewPages Char string void this selectedPage Char 在html中 我尝试绑定ngif中的选择页面 td name
  • 为什么通过 gmail 的 SMTP 在本地工作但在我的生产服务器上不起作用?

    我正在运行托管在 AWS 爱尔兰 上的 Nodejs 服务器 并使用 emailjs 发送电子邮件 我使用的电子邮件帐户是 gmail 帐户 我可以从本地计算机发送电子邮件 没有任何问题 但电子邮件无法从生产服务器发送 出站防火墙设置为允许
  • Android 如何检查文件是否存在并创建一个?

    我有以下问题 我想将一个名为 data xml 的文件放入 sdcard appname 文件夹中 并使用它来读取和写入应用程序数据 因此 当我的主要活动创建时 我需要检查该文件是否存在 public class appname exten
  • 如何在 Instagram 等应用中使用“@”提及用户

    我正在创建一个具有照片共享功能的应用程序 并且我正在尝试添加提及 或标记 用户的功能 Twitter 最初开始使用 和用户名来标记用户 但现在从 Facebook 到 Instagram 都在使用它 这是iOS端实现的还是后端实现的 我目前
  • 将小数点数字转换为整数 - PowerShell

    我正在编写一个 PowerShell 脚本 它将带小数点的数字转换为整数 val 1024 24 如何将该值转换为整数 我希望它是1024 使用向下取整 四舍五入到较低的整数 Math Floor val 编辑 如果只是丢弃小数部分不是您想
  • 如何使用 Flutter 修复 VSCode 上的自动修复问题?

    我更新了迂腐的软件包并最终出现了 1000 多个问题 其中许多是首选单引号或不必要的等等 只需单击一下即可修复它们 我认为 eslint 或其他一些工具可以在 VSCode 中做到这一点 有没有办法在 Flutter 项目中做到这一点 我找
  • Pandas sklearn one-hot 编码数据帧还是 numpy?

    如何将 pandas 数据帧转换为 sklearn one hot encoded 数据帧 numpy 数组 其中某些列不需要编码 mydf pd DataFrame Target 0 1 0 0 1 1 1 GroupFoo 1 1 2
  • 将 everyauth 与 Restify 结合使用

    我正在尝试使用 everyauth 来处理使用restify 创建的rest api 的身份验证 但却找不到起点 我希望做类似的事情 var restify require restify var everyauth require eve
  • 每次使用 COUNT() 函数,还是存储该值并将其加一?

    我有一个带有用户 投票 表和 用户 表的数据库 我认为数据库会在短时间内变得相当大 所以我想使用最有效的方法 我想我可以每次使用 投票 表中的 WHERE 语句来 COUNT 投票数 或者我可以将分数存储在 用户 表中 每次投票时将其增加
  • C++:ostream 和 ostringstream 有什么区别?

    ostream 和 ostringstream 有什么区别 你什么时候会使用其中一种而不是另一种 简单地说 ostringstream提供了一个streambuf ostream要求用户提供一份 要理解其中的含义 有必要了解一点 流是如何工