为什么' '会刷新std::cout

Why does ` ` flush std::cout?

本文关键字:cout std 为什么 刷新      更新时间:2023-10-16

我是 c++ 的新手,据我所知,使用转义序列'n'不会刷新输出缓冲区(就像使用endl时发生的那样),但在我的情况下,在Ubuntu 14.04上的qt-creator下使用F11 (step into)调试以下程序时,函数的输出(这是5)直接被打印到控制台。

#include <iostream>
void printValue(int nValue)
{
    std::cout << nValue << 'n';
}
int main()
{
    using namespace std;
    printValue(5);
    return 0;
}

当我从第1行输出中删除'n'时。5、输出延迟到执行结束。

  • 为什么?

是的,endl将导致刷新,但这并不意味着缓冲区不能出于其他原因决定自己刷新。请看这个参考,特别是这个:

在许多实现中,标准输出是行缓冲的,写入'n'无论如何都会导致刷新

标准没有定义冲洗时间,因此流可以在任何时间冲洗。

它实际上依赖于实现,如果'n'std::ostream中看到触发刷新。

强制且安全的方法是使用std::endl