std :: endl和'\ n'有什么区别

时间:2020-10-07 23:53:07

标签: c++ linux iostream endl

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

2 个答案:

答案 0 :(得分:0)

std::ostream os;

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

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

这两行效果完全相同。

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

  • 如果输出流是行缓冲的,std::cout应该是这种情况,如果它连接到交互式终端 并且实现可以检测到该情况,则打印{ {1}}已刷新。

  • 如果输出流与您随后直接从中读取的输入流配对(\nstd::cout配对),则读取已经刷新。

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

答案 1 :(得分:-2)

std::cout << ... << std::endl和此std::cout << ... << '\n'不完全相同。在最后一个中,换行符\n被流传输到输出。在大多数情况下,控制台会将其解释为换行符。但是std::endl表示(如前所述)在输出控制台中完全刷新和换行。

假设您将其写在文档中。在Linux中,\n就足够了。但是Windows需要\r\n。因此,新行将不会使用\n和例如Windows中的记事本++。

相关问题