来自C++11,§27.7.3.8-
namespace std
{
template <class charT, class traits>
basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}
Run Code Online (Sandbox Code Playgroud)
效果:调用os.put(os.widen('\n')),然后调用os.flush().
返回:操作系统.
因此,从标准中可以清楚地endl刷新输出流缓冲区,而\n不是.通常,您将需要endl用于打印新行,但您还应记住,每次执行此操作时,输出缓冲区也将被刷新.
关于平台意识
从标准来看,显然两者完全相同 - 以完全相同的方式打印新行.因此,如果一个是独立于平台的,那么另一个也应该是相同的.由于我肯定知道endl平台是独立的,所以应该是这样的\n.
std::endl是一个输出'\n',然后刷新流的操纵器.对于大多数临时使用,这是你应该使用的.但是,在输出大量数据时,可能会导致显着的性能损失,在这种情况下,使用'\n'.
编辑:
关于平台意识:两者输出完全相同的东西.如果在文本模式下打开流,'\n'则会导致行结束的平台相关表示:Unix下的0x0A,Windows下的0x0D,0x0A,在某些大型机下启动新记录等.如果流以二进制形式打开模式,它将导致输出单个字节(通常为0x0A,但实际上取决于所使用的基本字符编码).