cout、cerr、clog有何区别?

强颜欢笑 提交于 2020-02-28 17:11:51


  • windows+vs情况下:在控制台上,cout能重定向到文件,cerr和clog不能。输出重定向到文件实际上就是一个管道的一头连输出流,另一头连文件输入流

  • cout具有自己的缓冲区,当缓冲区满或遇到endl会刷新终端(默认是屏幕);cerr没有缓冲区,直接刷新终端

  • cout的写缓存操作和系统刷新终端的操作是异步的,所以会存在当程序崩溃的情况下按代码执行顺序应该输出的内容可能只输出了一部分,而不是全部输出,因为这个时候程序已经崩溃了

  • cout、printf其实是写缓存。这就存在一个问题,当缓冲区满了并且没有被消耗的情况下,cout、printf会被阻塞。如当程序A通过管道将cout的通过管道重定向到程序B的时候,若缓冲区满了,但程序B一直不消耗缓冲区,那么程序A中的cout会阻塞知道程序B消耗了缓冲区为止


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!