微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试图了解刷新缓冲区问题的影响

如何解决试图了解刷新缓冲区问题的影响

我是 C++ 的完全初学者,所以如果我的问题听起来很愚蠢或其他什么,我深表歉意。

我一直在读一本关于流缓冲区的简单介绍的书,在某些情况下刷新缓冲区很重要,因此为了理解我运行以下代码效果

代码 1:

#include <iostream>
#include <thread>
#include <chrono>   
using namespace std;
      
int main()
{
  for (int i = 1; i <= 5; ++i)
  {
      cout << i << " ";
      this_thread::sleep_for(chrono::seconds(1));
  }
  cout << endl;
  return 0;
}

代码 2:

#include <iostream>
#include <thread>
#include <chrono>
using namespace std;

int main()
{
   for (int i = 1; i <= 5; ++i)
   {
      cout << i << " " << flush;
      this_thread::sleep_for(chrono::seconds(1));
   }
   return 0;
}

两个代码给出相同的输出,完全没有区别,它们打印 1 sleep for 1 seconds 然后是 2,sleep for another second,依此类推。

我尝试在 DevC++ 和 CodeBlocks 中运行代码,结果相同。

书上说code1的结果-->“程序等待5秒,一次打印所有数字”,code2的结果-->“程序打印数字等待1秒,打印出数字第二个数字等等”。

我真的不明白出了什么问题。

解决方法

这是一个有和没有刷新异常的例子(它应该在最后一行被刷新之前终止程序):

#include <iostream>
int main() {
    std::cout << "test with flush" << std::flush;
    std::cout << "test without flush";
    throw;
}

godbolt 中编译并运行时,我看到:

Program returned: 139
terminate called without an active exception
test with flush

但是没有提到“没有刷新的测试”,因为程序在它可以自动刷新之前就结束了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。