我很好奇为什么我通过不同的ostream输出,并且不刷新它们,但是当程序退出时,它们不会弄乱顺序,一个ostream会刷新其他流吗?C++标准库如何让它们进行通信?
#include <iostream>
int main()
{
std::clog << "flush test1 by clog\n";
std::cout << "flush test1 by cout\n";
std::cout << "flush test2 by cout\n";
std::clog << "flush test2 by clog\n";
return 0;
}
/* The output is
* flush test1 by clog
* flush test1 by cout
* flush test2 by cout
* flush test2 by clog
*/
最佳答案
clog
流通常与 cerr
流相同,这取决于您的库,行缓冲或不缓冲,这意味着至少在一行之后break (\n
) 它被写入您的终端。另一方面,cout 可能是完全缓冲的(仅在缓冲区已满或刷新时才写入)、行缓冲或不缓冲。来自cplusplus.com
的更具体信息:(“如果已知stdout不引用交互式设备,则流被完全缓冲。否则,流是否是行的取决于库默认情况下缓冲或不缓冲。”
)。假设您的终端是交互式的,cout
缓冲区至少会在每一行之后写入您的终端。
关于c++ - ostream 会刷新其他流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62617947/