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