'\n' 是什么? 和 std::endl 有什么区别?

'\n' 是什么? 和 std::endl 有什么区别?#

简单而言, '\n' (newline) 才是换行符.

输入输出存在缓冲区, 当我们通过 cin 输入或通过 cout 输出时, 程序总是将内容先填入 各自的 缓冲区中, 等到有一定的量后, 再一次性将缓冲区中内容排出, 这样的过程称为刷新 (flush).

除了缓冲区内填入了一定量的内容以外, 还有什么情况缓冲区会刷新? 常见的有,

  • cout.flush();, cout << std::flush;.

  • cincout 是相互绑定的 (cin.tie(cout);), 当 cin 进行输入时, cout 的缓冲区就会刷新.

cout << std::endl 的效果相当于 cout << '\n' << std::flush.

提示

cin 不存在可直接使用的刷新方法, 可以使用 cin.ignore(std::numeric_limits<std::streamsize>::max(), delim) 忽略缓冲区中内容直到 delim 字符.