我的程序打印大量短行cout
.
作为一个稍微做作的例子,我的线条看起来有点像这样:
cout<<"The variable's value is: "<<variable<<endl;
我希望程序能够运行fast我确实相信endl
正在杀了我,因为它启动了缓冲区刷新cout
每次使用时。
现在,互联网上的一些人说我可以这样做:
cout<<"The variable's value is: "<<variable<<"\n";
但这似乎不是一个好的解决方案,因为endl
抽象了可能指定端线的特定系统特定方式,其中\n
才不是。这似乎也是一个糟糕的解决方案,因为如果我将来需要缓冲,我就必须修改整个代码库。
因此,我问,有没有办法禁用缓冲区刷新方面endl
?
EDIT
进一步挖掘seems来表明两者endl
and \n
尊重操作系统可能选择结束其线路的各种方式。看来也 https://stackoverflow.com/questions/796865/can-i-stop-stdcout-flushing-on-n输出流检测它是否处于潜在的交互情况并相应地进行缓冲和刷新。因此:问题可以通过手动告诉输出流执行积极的缓冲来解决......如果我能弄清楚如何做到这一点。
endl 抽象了可能指定结束行的特定系统特定方式,而 \n 则不然”。
std::endl
被定义为输出'\n'
随后是冲洗。特定于系统的换行符的正确抽象是'\n'
.
为了防止潮红,人们只是不使用std::endl
。此外,如果标准输出连接到或可能连接到交互式设备,则标准输出可以是行缓冲的,在这种情况下,换行符将刷新流。如果这是一个问题,请使用ofstream
连接到一个命名文件。我认为在类 Unix 系统上,行缓冲仅在标准输出是终端时发生。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)