'\n' 是什么? 和 std::endl 有什么区别?#
简单而言, '\n' (newline) 才是换行符.
输入输出存在缓冲区, 当我们通过 cin 输入或通过 cout 输出时, 程序总是将内容先填入 各自的 缓冲区中, 等到有一定的量后, 再一次性将缓冲区中内容排出, 这样的过程称为刷新 (flush).
除了缓冲区内填入了一定量的内容以外, 还有什么情况缓冲区会刷新? 常见的有,
cout.flush();,cout << std::flush;.cin和cout是相互绑定的 (cin.tie(cout);), 当cin进行输入时,cout的缓冲区就会刷新.
而 cout << std::endl 的效果相当于 cout << '\n' << std::flush.
提示
cin 不存在可直接使用的刷新方法, 可以使用 cin.ignore(std::numeric_limits<std::streamsize>::max(), delim) 忽略缓冲区中内容直到 delim 字符.