在您声明此问题重复之前 或者 , ,请考虑我已将问题提交给 在线法官\n 得到了 WA,然后 std::endl 并得到了空调。所以,我需要一个非常具体的答案 平台意识: :是 \n 真正具有平台意识,并且运行时是否真的根据平台编写了正确的行结尾,正如其他问题的答案所声称的那样?如果是这样,你能告诉我这是怎么发生的吗?

如果答案可以通过有关平台意识问题的标准引用来支持,我将非常感激。我已经阅读了所有其他问题的答案(甚至是已关闭的问题),所以请不要重复“刷新缓冲区”的事情。

有帮助吗?

解决方案

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,但实际上取决于所使用的基本字符编码)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top