std::endl
我已经阅读了和之间的区别'\n'
是std::endl
刷新缓冲区而'\n'
不是。但是,据我所知stdout
,在 linux 上无论如何都是行缓冲的,所以这是否意味着std::cout << ... << std::endl
与std::cout << ... << '\n'
?
问问题
208 次
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 回答