c++缓冲区是怎么回事的哦?是怎么把输入输出存入缓冲区的哦?平时直接cout就打印结果了啊,没体会到怎么属于缓冲了的

#include <iostream>

using namespace std;

int main()
{
    cout << "zz";
    cerr << "ed";
    return 0;
}

像上面的这段代码,cerr不用存到缓冲区嘛,它就是直接输出到控制台的,但是cout也是直接输出的啊,也没有用endl控制器去刷新缓冲区啊,如果cout输出是要先放到缓冲区,那上面这个简短的程序又是什么刷新了cout的缓冲区啊。

阅读 4.8k
2 个回答

cout的话, 是行级缓冲, 只要碰到换行符就会flush一次. 但是cout对象在析构的时候也会flush一次. 你那个例子里面, 在return 0之前cout对象需要析构一次.
cerr的话, 已经忘了APUE里面怎么说的了, 调试下来发现没有缓冲.....

多线程的时候你就体会到了,如果不清缓存,A线程的日志可能会在B线程被打印出来

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题