我的程序将大量短行打印到 cout
。
作为一个稍微做作的例子,我的台词看起来有点像这样:
cout<<"The variable's value is: "<<variable<<endl;
我希望程序运行快,我相信 endl
正在杀死我,因为它在 cout
上启动缓冲区刷新每次使用它。
现在,网上有些人说我可以这样做:
cout<<"The variable's value is: "<<variable<<"\n";
但这似乎不是一个好的解决方案,因为 endl
抽象了可能指定结束行的特定系统特定方式,而 \n
则没有。这似乎也是一个糟糕的解决方案,因为如果我将来需要缓冲,我将不得不修改整个代码库。
因此,我问,有没有办法禁用 endl
的缓冲区刷新方面?
编辑
进一步挖掘似乎表明endl
和\n
都尊重操作系统可能选择结束其行的各种方式。 It also seems输出流检测它是否处于潜在的交互情况并相应地缓冲和刷新。因此:这个问题可以通过手动告诉输出流执行主动缓冲来解决......如果我能弄清楚该怎么做的话。
最佳答案
endl abstracts the particular system-specific ways an end line might be specified, where as \n does not".
std::endl
被定义为输出 '\n'
后跟刷新。系统特定换行符的正确抽象只是'\n'
。
为了防止刷新,我们只是不使用 std::endl
。此外,如果标准输出连接到或可能连接到交互式设备,则标准输出可能是行缓冲的,在这种情况下,换行符将刷新流。如果这是一个问题,请使用连接到命名文件的 ofstream
。我认为在类 Unix 系统上,只有当标准输出是终端时才会发生行缓冲。
关于c++ - 告诉 `endl` 不要刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21129162/