冲洗缓冲区是什么意思?
我正在学习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;
通过输出一切来清除缓冲区。