Ric*_*ard 1 c++ iostream newline
我的程序打印了大量的短行cout.
作为一个有点人为的例子,我的线条看起来有点像这样:
cout<<"The variable's value is: "<<variable<<endl;
Run Code Online (Sandbox Code Playgroud)
我希望程序能够快速运行,我相信这会让我感到害怕,endl因为它会在cout每次使用时启动缓冲区刷新.
现在,互联网上的一些人说我可以这样做:
cout<<"The variable's value is: "<<variable<<"\n";
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个好的解决方案,因为endl抽象特定于系统的特定方式可以指定终止线,而\n不是.这似乎也是一个糟糕的解决方案,因为,如果我将来需要缓冲,那么我将不得不修改整个代码库.
因此,我问,有没有办法禁用缓冲区刷新方面endl?
编辑
进一步的挖掘似乎表明了两者endl并且\n尊重OS可能选择的各种方式来结束它的线条.似乎输出流检测它是否处于潜在的交互状态,并相应地缓冲和刷新.因此:问题可以通过手动告诉输出流执行积极缓冲来解决...如果我能弄清楚如何做到这一点.
endl抽象特定于系统的特定方式,可以指定结束行,其中\n不是".
std::endl定义为输出'\n'后跟刷新.正确抽象系统特定的换行符就是这样'\n'.
为了防止冲洗,人们只是不使用std::endl.此外,如果标准输出是或可能连接到交互设备,则标准输出可以是行缓冲的,在这种情况下,换行符将刷新流.如果这是一个问题,请使用已ofstream连接的命名文件.我认为在类Unix系统上,线路缓冲仅在标准输出是终端时发生.
endl刷新.如果您不想要这种行为,请不要使用endl.如果您想轻松更改代码,请使用您自己的操纵器:
inline std::ostream& myendl( std::ostream& os ){
os.put(os.widen('\n'));
return os;
}
Run Code Online (Sandbox Code Playgroud)
这样您就可以轻松地改变您myendl在一个地方的行为.
| 归档时间: |
|
| 查看次数: |
1811 次 |
| 最近记录: |