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

标签 c++ linux iostream endl

我读过 std::endl 之间的区别和 '\n'是那个std::endl刷新缓冲区并 '\n'没有。不过,据我所知stdout在 Linux 上无论如何都是行缓冲的,这是否意味着 std::cout << ... << std::endlstd::cout << ... << '\n'相同?

最佳答案

std::ostream os;

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

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

这两行具有完全相同的效果。

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

  • 如果输出流是行缓冲的,std::cout 应该是这种情况,如果它连接到交互式终端,实现可以检测到,然后打印 \n 已经刷新。

  • 如果输出流与您之后直接读取的输入流配对(std::coutstd::cin 配对),则读数已经刷新。

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

关于c++ - std::endl 和 '\n' 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64253865/

相关文章:

c++ - CWindowImpl - Create() 返回错误代码 1406

linux - 如何在 unix shell 中转置行和列?

android - 来自 p2p wifi spy 相机的 H264 数据包

c++ - 用户定义的参数化操纵器

c++ - 将 istream 转换为 FILE*

C++ boost :asio convert socket to stream?

android - mmap后在memcpy中获取段错误SIGSEGV

c++ - 为什么我从 gdbserver 得到 "not in executable format: Success",但在 gdb 中一切正常?

c++ - boost::asio 无法从文件中读取超过 65536 个字节

linux - 如何重新创建正在运行的 supervisord 进程丢失的套接字