std :: endl在每个平台上的确切代表是什么?

Mat*_*att 11 c++

考虑UNIX,Windows和Mac以及输出流(二进制和文本),

什么std::endl代表,即<CR><LF>,<LF><CR>?或者无论平台/编译器是什么,它总是一样的吗?

我问的原因是我正在编写一个TCP客户端,该客户端会讨论一个期望每个命令结束的协议<CR><LF>.所以我想知道是否使用std::endl"\r\n"在我的流中.

编辑:好的,所以一个冲洗缓冲区而另一个没有.我明白了.但是,如果我将文本输出到文件,'\n'等于<LF>或者是否<CR><LF>在Windows上和<LF>Unix 上进行转换?我还没有看到明确的答案.

Mar*_*ork 11

代码:

stream << std::endl;

// Is equivalent to:

stream << "\n" << std::flush;
Run Code Online (Sandbox Code Playgroud)

所以问题是什么是"\n"映射.
在正常的流上没有任何事情 但是对于文件流(在文本模式下),"\n"被映射到行序列的平台末尾.注意:当读取文本模式下的文件时,读取会将行序列的平台末尾转换回'\n'.

因此,如果您使用普通流,则没有任何反应.如果您正在使用文件流,只需确保以二进制模式打开它,以便不应用任何转换:

stream << "\r\n"; // <CR><LF>
Run Code Online (Sandbox Code Playgroud)


小智 7

C++标准说它:

调用os.put(os.widen('\n')),然后调用os.flush()

'\n'被转换为什么,如果它被转换,则归结为它所使用的流类型,以及可以打开流的任何可能模式.