gpt4 book ai didi

c++ - std::ostream 是否存在 "unput",就像 std::istream 存在 "unget"一样?

转载 作者:太空狗 更新时间:2023-10-29 19:54:51 27 4
gpt4 key购买 nike

我有一些解析代码允许将转义序列输入到文本字符串中:

// In a file or large, multi-line string ...
my_parameter="A setting for the parameter\nthat contains \"escape sequence\" characters"

当我解析它时,我处理反斜杠并将适当的字符添加到我正在使用 std::ostringstream 实例构建的字符串中。换行符、引号、反斜杠等都可以正常工作。但是,我正在考虑是否允许 \b 序列,然后看看我是否可以像你一样从我的 ostringstream 中“取消输入”最后一个字符“从任何 std::istream 中取消获取”。你能做这样的事吗?如果该函数不存在,是否有一种简单的方法将写入位置向后推一个字符并简单地让下一个字符读取覆盖它?

这不是关键任务或类似的东西,但我很好奇以前是否有人遇到过这种情况。

最佳答案

流非常像邮件。在流上发送的每条消息都像一封信,消息可以排队进入缓冲区,就像邮箱一样。

如果您负责将邮件放入邮箱和从邮箱中取出邮件,那么您当然可以知道您刚刚放入的一封信仍然在那里供您取回。当然,您可能根本不会麻烦将其放入邮箱,因为您拥有两端。

相反,如果您将一封信放入您女朋友的邮箱,您就无法真正控制她何时检查她的邮箱并取出所有信件。可能她就坐在门口,等信一进槽就把信抢过来看了。

更有可能的是,您实际上是将信件投递到邮局(操作系统)拥有的邮箱中。虽然许多这样的容器只是垃圾箱, postman 每天检查一次,但可能是插槽直接连接到分拣机,信件在你放下的那一刻就被送达了。

在具有并发性的流接口(interface)中,没有通用的方法可以在写入后重新获得写入的所有权。如果您需要,您应该在您和流之间放置一个中间缓冲区,并且仅当您确定您准备就绪时才将其刷新到流中。

关于c++ - std::ostream 是否存在 "unput",就像 std::istream 存在 "unget"一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4414090/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com