And*_*rew 18 c++ portability eol end-of-line
是否有任何方法可以根据所使用的操作系统自动使用正确的EOL字符?
我在想什么std::eol
?
我知道使用预处理程序指令非常容易,但如果已经可用则很好奇.
我感兴趣的是我通常在我的应用程序中有一些消息,我后来将它们组合成一个字符串,我希望用EOL分隔它们.我知道我可以使用,std::stringstream << endl
但有时似乎是一种矫枉过正而不是常规追加.
Pot*_*ter 15
std::endl
被定义为除了写入'\n'
流并刷新它之外什么也不做(第27.6.2.7节).法拉盛定义stringstream
为什么都不做,所以你有一个漂亮的说法mystringstream << '\n'
.您的操作系统上的标准库实现会进行\n
适当的转换,因此您不必担心.
因此endl
,性能和可移植性已经是最终的,而您可能想要的唯一其他事情是,<< '\n'
如果您正在尝试有效地写入文件(而不是字符串流).好吧,<< '\n'
也消除了毫无意义的虚拟呼叫stringbuf::flush
.除非分析显示空函数调用需要时间,否则不要考虑它.
Ste*_*sop 11
如果要为流写入行分隔符:
std::cout << '\n';
Run Code Online (Sandbox Code Playgroud)
要么
std::cout << "\n";
Run Code Online (Sandbox Code Playgroud)
要么
std::cout << "whatever you were going to say anyway\n";
Run Code Online (Sandbox Code Playgroud)
如果流是文本模式,并且OS使用除LF之外的任何其他内容作为分隔符,则将转换它.
如果要编写行分隔符并刷新流:
std::cout << std::endl;
Run Code Online (Sandbox Code Playgroud)
如果由于某种原因你有二进制模式输出,并且你想编写特定于平台的换行符,那么我认为你可能必须间接地做(写入'\n'
文本流然后在二进制模式下检查它以查看你的内容)得到).可能有一些方法直接从实现中获取换行序列,我不知道.无论如何,这不是一个好主意:如果你是以二进制模式编写或读取文件,那么它应该采用一种格式,它独立于操作系统定义换行符,或者根本没有行.这就是二进制模式的用途.
归档时间: |
|
查看次数: |
17608 次 |
最近记录: |