我的理解是从here如果我要输出字符而不刷新缓冲区(endl
or cin
)在程序结束之前它们不会出现在我的控制台上。
所以我尝试做一个无限循环:
for(;;)
{
std::cout << "a" << std::endl;
}
和不刷新缓冲区相同:
for(;;)
{
std::cout << "a";
}
他们都永远输出a
,我可以观察到的唯一区别是后一个版本的代码在开始输出字母之前有一些延迟时间。第一个立即开始。
我期望第二个只有在存在时才输出字符break
在循环中,程序将被终止。
你是对的std::endl
,或使用std::cin
,导致刷新发生,并且内容立即输出。std::endl
相当于std::cout.put('\n'); std::cout.flush();
, 然而std::cin
and std::cerr
are tie()
d to std::cout
因此对其中任何一个执行的任何操作std::cout.flush()
为你。
然而,在第二种情况下,std::cout
仍然有一个底层输出序列(std::streambuf
),这是一个指定的大小。一旦该缓冲区已满,流就会自动刷新,并且您可以将输出发送到控制台。填充这个缓冲区就是你所看到的延迟时间你提到的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)