为什么`\ n`刷新std :: cout?

时间:2015-10-02 18:22:19

标签: c++

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

#include <iostream>

void printValue(int nValue)
{
    std::cout << nValue << '\n';
}

int main()
{
    using namespace std;
    printValue(5);
    return 0;
}

当我从第i行的输出中删除'\n'时。 5,输出推迟到执行结束。

  • 这是为什么?

3 个答案:

答案 0 :(得分:2)

标准没有定义刷新时间,因此流可以随时刷新。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

是的,endl会导致刷新,但这并不意味着缓冲区不能因其他原因决定刷新自己。请参阅this reference,尤其是:

  

在许多实现中,标准输出是行缓冲的,并且写入&#39; \ n&#39;无论如何都会导致冲洗