Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;理解缓冲区和std::endl_C++ - Fatal编程技术网

C++ C++;理解缓冲区和std::endl

C++ C++;理解缓冲区和std::endl,c++,C++,我试图理解buffer,endl vs\n以及为什么后者比endl更有效 具体来说,我正在读这篇文章 下面的代码应该同时输出1,2,3,4,5 #include <iostream> #include <windows.h> using namespace std; int main() { for (int i = 1; i <= 5; ++i) { cout << i << " " ;

我试图理解buffer,endl vs\n以及为什么后者比endl更有效

具体来说,我正在读这篇文章

下面的代码应该同时输出1,2,3,4,5

#include <iostream>
#include <windows.h>
using namespace std;


int main()
{
   for (int i = 1; i <= 5; ++i)
   {
      cout << i << " " ;
     Sleep(300);
   }
     cout << endl;

   return 0;
}
#包括
#包括
使用名称空间std;
int main()
{

对于(int i=1;i,如果运行以下代码,您将清楚地看到差异:

#包括
#包括
使用名称空间std;
int main()
{

对于(int i=1;i Just inverse:
'\n'
只是在缓冲区中添加一个字符,不一定刷新,
std::endl
强制将缓冲区打印到屏幕上。如果我没有理解您的意思,您会想,即使没有显式刷新,输出也会立即完成吗?这很有趣,因为我发现了另一个问题,它问的正是o相反:。因此,它可能取决于您的平台、IDE、控制台或任何东西,所有内容都会立即打印出来,即使没有明确刷新。旁注:@Scheff
Sleep
(首字母大写)对windows平台的提示-可能是MSVC(我眼中的错误选择…)。如果MS决定在调用该函数时刷新缓冲区,我不会感到惊讶……这不是更有效吗,因为它会等待缓冲区满了,然后立即输出所有内容,而不是\n?我认为您是反向的。在刷新时,
endl
会立即将缓冲区转储到底层媒体中(这可能会很昂贵).
“\n”
不必刷新(但某些实现会刷新,因为它适合该介质),并且可能会在将缓冲区发送到介质之前填满整个缓冲区。
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
   for (int i = 1; i <= 5; ++i)
   {
      cout << i << " " << flush;
      Sleep(300);
   }
   return 0;
}