3

std::endl我已经阅读了和之间的区别'\n'std::endl刷新缓冲区而'\n'不是。但是,据我所知stdout,在 linux 上无论如何都是行缓冲的,所以这是否意味着std::cout << ... << std::endlstd::cout << ... << '\n'?

4

2 回答 2

0
std::ostream os;

os << std::endl; // more concise

os << '\n' << std::flush; // more explicit about flushing

这两行具有完全相同的效果。

手动冲洗通常是浪费时间:

  • 如果输出流是行缓冲的,std::cout如果它连接到交互式终端并且实现可以检测到,那么打印\n已经刷新。

  • 如果输出流与您之后直接读取的输入流配对(std::cout并且std::cin已配对),则读取已经刷新。

  • 如果您没有人等待数据到达其目的地,那么刷新将再次浪费。

于 2020-10-08T00:35:33.590 回答
-2

std::cout << ... << std::endl和这std::cout << ... << '\n'不完全一样。在最后一个中,换行符\n被流式传输到输出。在大多数情况下,这将被控制台解释为换行符。但是std::endl意味着(正如您已经提到的)在输出控制台中完全刷新和换行。

假设您将其写在文档中。在 Linux 中\n就足够了。但 Windows 期望\r\n. \n因此,在 Windows 中使用 Notepad++不会出现新行。

于 2020-10-08T00:17:46.697 回答