考虑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'被转换为什么,如果它被转换,则归结为它所使用的流类型,以及可以打开流的任何可能模式.