"\n" 或 '\n' 或 std::endl 用于输出到 std::cout?

10 浏览
0 Comments

"\n" 或 '\n' 或 std::endl 用于输出到 std::cout?

这个问题已经在这里有回答了

\"std::endl\" vs \"\\n\"

我已经多年没有使用std::endl来结束写入std::cout的行了,而是改为使用\"\\n\"

但是现在我开始看到更多的代码片段使用\'\\n\',于是我开始想这样做可能是最好的选择。

除了一个是字符串,另一个是字符之外,是否有使用这个:

std::cout << variable << '\n';

优于这个:

std::cout << variable << "\n";


最近的补充:

当我提出这个问题时,我似乎认为换行符\'\\n\'会刷新缓冲区。现在我知道这取决于情况。

默认情况下,std::cin绑定到旧的C stdinFILE*流,而std::cout绑定到stdout。换行刷新缓冲区是由这个绑定引起的。默认情况下,如果stdout连接到终端,则设置为行缓冲。这意味着新行将刷新其缓冲区。因此,在使用std::cout输出换行时,stdout将被刷新。

如果stdout未连接到终端(例如输出已被重定向或管道),或者std::coutstdout之间的绑定被断开,则换行不会刷新任何内容。

admin 更改状态以发布 2023年5月22日
0
0 Comments

没有最好的方法。你需要使用你需要的:

  • '\n' - 结束一行
  • "some string\n" - 在一些字符串后结束一行
  • std::endl - 结束一行并刷新流
0
0 Comments

实际上,'\n' 应该是默认的选择。除非你想要明确地刷新流(你什么时候以及为什么会这样做?),否则根本不需要使用 std::endl

当然,许多书籍和教程将 std::endl 用作默认值。这是不幸的,并且可能导致严重的性能问题。

我认为使用 '\n' 和使用 "\n" 之间几乎没有区别,但是后者是一个由(两个)字符组成的数组,需要逐个字符打印,需要设置循环,比输出单个字符更复杂。当然,在进行 IO 时,这很少有影响,但如果有疑问,当您想要输出一个字符时,请输出一个字符,而不是整个字符串字面量。

这样做的一个好处是,在您的代码中,您可以传达您打算仅输出单个字符,并且没有不小心输出多个字符。


1 请注意,默认情况下,std::coutstd::cin 绑定,在任何输入操作之前,都会刷新 std::cout,这样任何提示信息都将在用户输入之前得到打印。

0