std::endl 和 之间的区别(关于平台意识)
解决方案
从 C++11
, §27.7.3.8
-
namespace std
{
template <class charT, class traits>
basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}
效果:调用os.put(os.widen(' ')),然后调用os.flush()。
返回:os.
所以,从标准中可以清楚地看出 endl
刷新输出流缓冲区,同时 \n
没有。一般来说,您会想要使用 endl
用于打印新行,但您还应该记住,每次执行此操作时,输出缓冲区也会被刷新。
关于平台意识
从标准来看,很明显两者都做完全相同的事情 - 以完全相同的方式打印新行。因此,如果一个是平台无关的,那么另一个也应该是相同的。既然我确定 endl
是平台独立的,情况也应该如此 \n
.
其他提示
std::endl
是一个输出的操纵器 '\n'
, ,然后刷新流。对于大多数休闲用途,您应该使用它。然而,当输出大量数据时,可能会导致性能显着下降,在这种情况下,使用 '\n'
.
编辑:
关于平台认知度:两者输出完全相同的东西。如果流以文本模式打开, '\n'
将导致出现与平台相关的行结尾表示:Unix下为0x0A,Windows下为0x0D、0x0A,某些大型机下开始一条新记录等。如果流以二进制模式打开,则会导致输出单个字节(通常为 0x0A,但实际上取决于所使用的基本字符编码)。
不隶属于 StackOverflow