std::endl 和 '\n' 有什么区别
What's the difference between std::endl and '\n'
我读过 std::endl
和 '\n'
之间的区别是 std::endl
刷新缓冲区而 '\n'
不刷新缓冲区。但是,据我所知 linux 上的 stdout
无论如何都是行缓冲的,所以这是否意味着 std::cout << ... << std::endl
与 std::cout << ... << '\n'
相同?
这个std::cout << ... << std::endl
和这个std::cout << ... << '\n'
不完全一样。在最后一个中,换行符 \n
被流式传输到输出。在大多数情况下,这将被控制台解释为换行符。但是 std::endl
意味着(正如你已经提到的)在输出控制台中完全刷新和换行。
假设您将其写在文档中。在 Linux 中 \n
就足够了。但是 Windows 期望 \r\n
。因此,使用 \n
不会出现新行,例如Windows.
中的记事本++
std::ostream os;
os << std::endl; // more concise
os << '\n' << std::flush; // more explicit about flushing
这两行的效果完全一样。
手动冲洗往往是浪费时间:
如果输出流是line-buffered,如果它连接到交互式终端和,std::cout
应该是这种情况该实现可以检测到,然后打印 \n
已经刷新。
如果输出流与您之后直接读取的输入流配对(std::cout
和 std::cin
配对),则读取已经刷新。
如果没有人等待数据到达目的地,刷新又是浪费。
我读过 std::endl
和 '\n'
之间的区别是 std::endl
刷新缓冲区而 '\n'
不刷新缓冲区。但是,据我所知 linux 上的 stdout
无论如何都是行缓冲的,所以这是否意味着 std::cout << ... << std::endl
与 std::cout << ... << '\n'
相同?
这个std::cout << ... << std::endl
和这个std::cout << ... << '\n'
不完全一样。在最后一个中,换行符 \n
被流式传输到输出。在大多数情况下,这将被控制台解释为换行符。但是 std::endl
意味着(正如你已经提到的)在输出控制台中完全刷新和换行。
假设您将其写在文档中。在 Linux 中 \n
就足够了。但是 Windows 期望 \r\n
。因此,使用 \n
不会出现新行,例如Windows.
std::ostream os;
os << std::endl; // more concise
os << '\n' << std::flush; // more explicit about flushing
这两行的效果完全一样。
手动冲洗往往是浪费时间:
如果输出流是line-buffered,如果它连接到交互式终端和,
std::cout
应该是这种情况该实现可以检测到,然后打印\n
已经刷新。如果输出流与您之后直接读取的输入流配对(
std::cout
和std::cin
配对),则读取已经刷新。如果没有人等待数据到达目的地,刷新又是浪费。