【发布时间】:2015-10-02 18:22:18
【问题描述】:
我是 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、输出推迟到执行结束。
- 这是为什么呢?
【问题讨论】:
-
查看 libc 函数:setbuf 和 setlinebuf。 setlinebuf 是程序启动时 stdout/stderr [aka std::cout/std::cerr] 的隐式默认值。对于您自己打开的流,它们被赋予默认缓冲区大小,并且缓冲区必须在刷新之前填充。
标签: c++