我从这里了解到,如果我要输出字符而不刷新缓冲区(使用endl或cin),则在程序结束之前它们不会出现在我的控制台上。
所以我尝试做一个无限循环:
for(;;)
{
    std::cout << "a" << std::endl;
}
和不刷新缓冲区相同:
for(;;)
{
    std::cout << "a";
}
它们都永远输出a,我可以观察到的唯一区别是后一个版本的代码在开始输出字母之前有一些延迟时间。第一个立即开始。
我期望第二个仅当break循环中有 a 时才输出字符,并且程序将被终止。
您是正确的std::endl,或者使用std::cin会导致发生刷新,并且内容会立即输出。std::endl相当于std::cout.put('\n'); std::cout.flush();,其中 asstd::cin和std::cerr是tie()d std::cout,因此对其中任何一个的任何操作都会std::cout.flush()为您执行。
然而,在第二种情况下,std::cout仍然有一个底层输出序列 (an std::streambuf),它是指定的大小。一旦该缓冲区已满,流就会自动刷新,并且您可以将输出发送到控制台。填充这个缓冲区就是您所看到的您提到的延迟时间。
| 归档时间: | 
 | 
| 查看次数: | 999 次 | 
| 最近记录: |