首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"std::endl“vs "\n”

"std::endl“vs "\n”
EN

Stack Overflow用户
提问于 2008-10-18 05:25:17
回答 13查看 222.6K关注 0票数 626

许多C++书籍都包含这样的示例代码……

代码语言:javascript
复制
std::cout << "Test line" << std::endl;

...so,我也一直这么做。但我看到了很多像这样的开发人员的代码:

代码语言:javascript
复制
std::cout << "Test line\n";

有没有技术上的原因而不是另一个,或者只是编码风格的问题?

EN

回答 13

Stack Overflow用户

回答已采纳

发布于 2008-10-17 21:56:50

假设文件是以文本模式打开的,那么变化的行尾字符并不重要,除非您请求二进制文件,否则将以文本模式打开文件。编译后的程序将为编译的系统写出正确的内容。

唯一的区别是std::endl刷新输出缓冲区,而'\n'不刷新。如果你不想频繁刷新缓冲区,可以使用'\n'。如果您这样做了(例如,如果您想获得所有输出,但程序不稳定),请使用std::endl

票数 528
EN

Stack Overflow用户

发布于 2008-10-17 22:43:45

不同之处可以通过以下几点来说明:

代码语言:javascript
复制
std::cout << std::endl;

等同于

代码语言:javascript
复制
std::cout << '\n' << std::flush;

所以,

如果要强制立即刷新输出,则

  • 使用std::endl。如果担心性能(如果使用<<运算符,情况可能并非如此),则
  • 使用\n

我在大多数线路上使用\n

然后在段落末尾使用std::endl (但这只是一种习惯,通常不是必须的)。

与其他权利要求相反,仅当流要去往文件(std::cinstd::cout是特殊的,但仍然是文件(或类似文件))时,\n字符才被映射到行序列的正确平台末尾。

票数 280
EN

Stack Overflow用户

发布于 2008-10-17 21:28:21

可能存在性能问题,std::endl会强制刷新输出流。

票数 45
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/213907

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档