c++ - 到底什么是潮红?

标签 c++ buffer difference flush endl

我是编码和编程的新手(实际上是今天开始的)。我一直在观看一些视频并阅读几本书的开头,看看我可以点击哪些内容,但我无法理解其中的一些内容。

其中一个视频在基本的“Hello World”介绍中使用了 endl,另一个使用了 \n。我想更多地了解两者之间的区别。

因此,我了解到 endl\n 之间的区别在于 endl 将刷新代码,而 \n 不会,这使得 endl 变慢。我可以在 Google 上搜索到这么多。

但是,在搜索刷新 C++ 时,由于行话,我无法弄清楚它的含义。

冲水是什么意思,您何时以及为什么要冲水?什么是缓冲区?

如果可以的话,请用最基本的方式解释一下。

最佳答案

缓冲区是临时内存,用于存储可能需要一些时间的进程的输入。

它可以是为了不丢失任何数据。想一想快速计算机和慢速计算机之间的通信。较快的计算机可能以比较慢的计算机可以处理的速率更高的速率发送字节,而较慢的计算机正在处理一个字节,其他计算机仍在到达,它们存储在缓冲区中等待处理。

或者,它可能是出于性能原因。所有操作都有一个静态的时间成本,它与操作处理的数据大小无关(它可能需要初始化一些数据,等待资源,......)。如果该成本不可忽略,那么以尽可能少的次数支付该成本可能会很有趣。所以我们使用缓冲区来收集更多数据并将多个操作合并为一个。

对于您的情况,打印到屏幕的静态时间不可忽略,这就是默认使用缓冲区并且仅在接收到足够字节时才打印数据的原因。

刷新缓冲区意味着清空它并强制处理其中的数据。如果您想立即处理少量数据,它会很有用。

例如,如果您想打印“请输入您的年龄:”并等待用户输入一个数字,最好让用户实际看到该请求!所以在这里,刷新缓冲区是强制性的。

但是如果你打印文本流(想想一个程序在编译一个大项目时像编译器一样打印许多文本)最好不要刷新并让缓冲区填满这样你就不会花费静态时间您发送的每个 block (例如编译器案例的每个源文件)。并在最后一个 block 之后刷新以确保我们不会在缓冲区中间结束,这很有可能。

关于c++ - 到底什么是潮红?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47735850/

相关文章:

c++ - 为什么需要在菱形层次结构的中间指定虚拟继承?

c - 在 C 中写入文件时添加到缓冲区的额外字符

c - 自动边界检查?

Extjs 5 hasMany vs field.reference

python - 根据条件比较列值

c++ - 模板函数中的类型错误

c++ - int 参数为 : conditional expressions ignored? 的意外模板行为

linux - 生成无限流

python - 获取python中两个字典之间的差异(值)

C++ 泛型类