在本节中,我们将看到为什么在将行打印到控制台或文件中时避免使用std::endl的原因。我们使用std::endl在当前行之后创建换行符。对于几行IO操作,它没有任何问题。但是对于大量的IO任务,它会降低性能。
endl用于创建新行,但它不仅发送到新行,在将光标发送到下一行后,每次都会刷新缓冲区。
缓冲区的刷新不是程序员的任务。操作系统对此负责。每次请求刷新时,它都会请求操作系统。这种要求比较昂贵。而且,写一些行后,我们并不需要每次都刷新缓冲区。当缓冲区已满时,IO流将自动清除缓冲区。
如果我们使用std::endl并使用'\ n'来分析将近100000行文本写入文件所需的时间,我们可以很容易地看到两者之间的区别。与使用'\ n'相比,使用std::endl的代码完成任务所花的时间几乎要多两倍。