C++ C++;理解缓冲区和std::endl
我试图理解buffer,endl vs\n以及为什么后者比endl更有效 具体来说,我正在读这篇文章 下面的代码应该同时输出1,2,3,4,5C++ 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 << " " ;
#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、控制台或任何东西,所有内容都会立即打印出来,即使没有明确刷新。旁注:@ScheffSleep
(首字母大写)对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;
}