首页 > 代码库 > cout、cerr、clog有何区别?

cout、cerr、clog有何区别?


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

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

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

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