我已经读过std::endl
和'\n'
之间的区别是std::endl
会刷新缓冲区,而'\n'
不会。但是,据我所知,Linux上的stdout
无论如何都是行缓冲的,这是否意味着std::cout << ... << std::endl
与std::cout << ... << '\n'
相同?
答案 0 :(得分:0)
std::ostream os;
os << std::endl; // more concise
os << '\n' << std::flush; // more explicit about flushing
这两行效果完全相同。
手动冲洗通常是浪费时间:
如果输出流是行缓冲的,std::cout
应该是这种情况,如果它连接到交互式终端 并且实现可以检测到该情况,则打印{ {1}}已刷新。
如果输出流与您随后直接从中读取的输入流配对(\n
和std::cout
配对),则读取已经刷新。
如果您没有人等待数据到达目的地,则刷新将再次浪费。
答案 1 :(得分:-2)
此std::cout << ... << std::endl
和此std::cout << ... << '\n'
不完全相同。在最后一个中,换行符\n
被流传输到输出。在大多数情况下,控制台会将其解释为换行符。但是std::endl
表示(如前所述)在输出控制台中完全刷新和换行。
假设您将其写在文档中。在Linux中,\n
就足够了。但是Windows需要\r\n
。因此,新行将不会使用\n
和例如Windows中的记事本++。