为什么要使用endl,而不是使用换行符?
为什么要使用endl,而不是使用换行符?
这个问题已经有答案了:
当我可以使用\\n
时,是否有理由使用endl
与cout
一起使用?我的C++书籍建议使用endl,但我不知道为什么。难道\\n
不像endl
那样广泛支持,还是我漏掉了什么?
admin 更改状态以发布 2023年5月20日
endl
不仅仅是\n
字符的别名。当您向cout
(或任何其他输出流)发送信息时,它不会立即处理和输出数据。例如:
cout << "Hello, world!"; someFunction();
在上面的示例中,有一些机会函数调用将在刷新输出之前开始执行。使用endl
可以强制在执行第二个指令之前进行刷新。您也可以使用ostream::flush
函数来确保该操作。
endl
在流中添加'\n'
并在流上调用flush()
。所以
cout << x << endl;
等同于
cout << x << '\n'; cout.flush();
流可以使用内部缓冲区,当流被刷新时实际中流出缓冲区。对于cout
,您可能不会注意到差异,因为它与cin
以某种方式同步(链接),但对于任意流,例如文件流,在多线程程序中会注意到差异。
这里有一个有趣的讨论,关于为什么需要刷新流。