美团|C++中我们应该避免使用的代码


美团|C++中我们应该避免使用的代码
文章图片
美团|C++中我们应该避免使用的代码
文章图片
美团|C++中我们应该避免使用的代码
为什么我们应该避免使用std :: endl:
在使用cout时 , 通常使用std :: endl打印换行符 。 对于具有很少I / O操作的小型程序 , 这种做法是可以接受的 , 但是 , 如果I / O操作的数量增加了 , 那么程序的效率就会受到影响 。
std :: endl不仅会在流中添加换行符 , 还会在每次使用缓冲区时刷新缓冲区 。



我们实际上正在做这样的事情


缓冲区刷新是一项操作系统任务 。 每次刷新缓冲区时 , 都必须向OS发出请求 , 并且这些请求相对缓慢 。 此外 , 我们每次向流中写入内容时都不需要真正刷新缓冲区 , 因为缓冲区满时会自动刷新 。 在极少数情况下 , 我们确实需要执行刷新 , 我们可以使用cout.flush()或将std :: flush插入流中来显示指定操作 。


演示对性能的影响:
以下C ++程序演示了std :: endl的性能影响 。 我们一次使用std :: endl将100000个字符串写入两个文件 , 然后再次使用'\\ n' 。 在每种情况下 , 我们都会测量执行时间并打印这些时间
【美团|C++中我们应该避免使用的代码】

输出:(取决于机器)


从输出std :: endl可以看到 , 时间花费了将近一倍 。 在某些系统上 , 性能影响可能会更糟 。