冲洗缓冲区是什么意思?

我正在学习C ++,发现了一些我无法理解的东西:

可以显式刷新输出缓冲区来强制写入缓冲区。 默认情况下,阅读cin刷新cout ; 当程序正常结束时, cout也被刷新。

因此,清空缓冲区(例如输出缓冲区):是否通过删除缓冲区中的所有内容来清除缓冲区,或者通过输出缓冲区来清除缓冲区? 或者冲洗缓冲区意味着什么完全不同?

考虑写入文件。 这是一个昂贵的操作。 如果在你的代码中你一次写一个字节,那么每写一个字节将会非常昂贵。 因此,提高性能的常用方法是将正在写入的数据存储在临时缓冲区中。 只有在有大量数据的情况下才能将缓冲区写入文件。 通过推迟写入,并且一次写入大块,性能得到改善。

考虑到这一点,刷新缓冲区是将数据从缓冲区传输到文件的行为。

这是否通过删除所有内容来清除缓冲区,或者通过输出缓冲区来清除缓冲区?

后者。

你引用了答案:

可以显式刷新输出缓冲区来强制写入缓冲区。

也就是说,您可能需要“刷新”输出,以便将其写入基础stream(可能是一个文件,或者在列出的示例中为terminal)。

一般情况下,stdout / cout是行缓冲的:输出不会被发送到操作系统,直到您写入换行符或显式刷新缓冲区。 好处是像std::cout << "Mouse moved (" << px << ", " << py << ")" << endl只会导致一个写入底层的“文件”,而不是六个,这对性能来说更好。 缺点是,类似的东西

  for (int i=0; i<5; i++) { std::cout << "."; sleep(1); } std::cout << "\n"; 

会立即输出"....." 。 在这种情况下,您需要额外的<< flush来确保输出显示。

阅读cin刷新cout所以你不需要一个明确的刷新来做到这一点:

 std::string colour; std::cout << "Enter your favourite colour: "; std::cin >> colour; 

通过输出一切来清除缓冲区。