"std::endl" 与 "\\n"

新手上路,请多包涵

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

 std::cout << "Test line" << std::endl;

…所以我也一直这样做。但是我已经看到很多这样的工作开发人员的代码:

 std::cout << "Test line\n";

是否有技术上的理由比另一个更喜欢一个,或者这只是编码风格的问题?

原文由 Head Geek 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 642
2 个回答

假设文件以文本模式打开,则不同的行尾字符无关紧要,除非您要求二进制文件,否则您会得到这样的结果。编译后的程序将为编译的系统写出正确的东西。

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

原文由 David Thornley 发布,翻译遵循 CC BY-SA 3.0 许可协议

我从未见过有人说 '\n' 受 cout 格式的影响:

 #include <iostream>
#include <iomanip>

int main() {
    std::cout << "\\n:\n" <<  std::setw(2) << std::setfill('0') << '\n';
    std::cout << "std::endl:\n" << std::setw(2) << std::setfill('0') << std::endl;
}

输出:

 \n:
0
std::endl:

请注意,由于 '\n' 是一个字符并且填充宽度设置为 2,因此在 '\n' 之前只打印了 1 个零。

我在任何地方都找不到任何关于它的信息,但它可以用 clang、gcc 和 msvc 重现。

当我第一次看到它时,我非常困惑。

原文由 TheHardew 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题