提问人:Sudhakar Palanisamy 提问时间:4/1/2022 最后编辑:wohlstadSudhakar Palanisamy 更新时间:7/28/2022 访问量:129
C++ 中的 Clog 和 COUT 在输出值时会有不同的行为吗?
would clog and cout in c++ behave differently in outputing the value?
问:
我预计 Cout 和 Clog 会有类似的行为,因为两者都是缓冲输出。但是当我尝试时,结果就不同了。
COUT:
int main()
{
cout<<"Hello World" ;
while(1);
return 0;
}
输出:无 --> 由于 Cout 未刷新
阻塞:
int main()
{
clog<<"Hello World" ;
while(1);
return 0;
}
输出:Hello World
问:COUT 和 CLOG 都是缓冲的,为什么输出不一样呢?如何在不刷新缓冲区的情况下打印“Hello World”
答:
0赞
Alex D
7/28/2022
#1
首先,我不明白无限循环的目的。如果您尝试将线程置于睡眠状态,请查看这篇关于线程在 cpp 中休眠的帖子 StackOverflow 帖子,其次,如果您想刷新流,
请使用 .
至于它们之间的区别:基本上堵塞是一种很少使用的输出流,类似于 cerr。基本上阻塞输出到 stderr,类似于 cerr,而不是 stdout。检查这些可能有助于您理解区别:COUT vs CERR vs CLOG,Tutorialspoint。
现在谈谈 stdout 和 stderr 之间的区别。Stdout 始终处于缓冲状态,并在方便的时间或明确请求时自动刷新,同时 stderr 没有完全缓冲,并且总是立即打印内容,而无需显式刷新。std::cout << std::flush;
评论
while(1);
是未定义的,两个程序的输出可以是任何东西std::this_thread::sleep_for(std::chrono::milliseconds(1000));
clog
std::clog
是一个缓冲流,与 stdio 同步,并且“安全”地在多个线程中并发使用(忽略交错问题)。与之相反的是无缓冲的。std::cerr