gpt4 book ai didi

c++ - 在 C++ 中刷新字符串流时会发生什么?

转载 作者:太空宇宙 更新时间:2023-11-04 12:48:10 25 4
gpt4 key购买 nike

我最近了解到 std::stringstream 对象可以被刷新。冲洗有什么作用?它是由标准指定的,还是依赖于实现的,flush 在调用时是否必须执行任何操作?

最佳答案

任何继承自 std::ostream<Type> 的流由 std::streambuf<Type> 类型的缓冲区“支持” .当你输出到 ostream ,你真的输出到中间 std::streambuf .当 streambuf充满数据它将调用自己的方法std::streambuf::sync()这会将数据刷新到流中。

如果流是某种字符类型的设备(控制台、串行端口等),则 sync()会将部分或全部数据清空到接收设备中。

在这种情况下,接收设备是另一个缓冲区。从实现的角度来看,此缓冲区(在 char 的情况下为 std::strstream 类型)将不会有中间缓冲,因为接收缓冲区没有额外的延迟 w/关于 streambuf。 .

但是 - 这取决于实现。为了确保接收缓冲区实际上不是在等待 streambuf 填充,调用 flush() 是明智的。在使用之前期望接收缓冲区完成之前。

实现对flush()的调用这是依赖于用户上下文的。您还应该期待 flush()在非缓冲端点(如控制台、串行端口、USB 端点等)的情况下使用时会导致性能下降。

关于c++ - 在 C++ 中刷新字符串流时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50322177/

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