"\n" 或 '\n' 或 std::endl 用于输出到 std::cout?
"\n" 或 '\n' 或 std::endl 用于输出到 std::cout?
这个问题已经在这里有回答了:
我已经多年没有使用std::endl
来结束写入std::cout
的行了,而是改为使用\"\\n\"
。
但是现在我开始看到更多的代码片段使用\'\\n\'
,于是我开始想这样做可能是最好的选择。
除了一个是字符串,另一个是字符之外,是否有使用这个:
std::cout << variable << '\n';
优于这个:
std::cout << variable << "\n";
最近的补充:
当我提出这个问题时,我似乎认为换行符\'\\n\'
会刷新缓冲区。现在我知道这取决于情况。
默认情况下,std::cin
绑定到旧的C stdin
FILE*
流,而std::cout
绑定到stdout
。换行刷新缓冲区是由这个绑定引起的。默认情况下,如果stdout
连接到终端,则设置为行缓冲。这意味着新行将刷新其缓冲区。因此,在使用std::cout
输出换行时,stdout
将被刷新。
如果stdout
未连接到终端(例如输出已被重定向或管道),或者std::cout
和stdout
之间的绑定被断开,则换行不会刷新任何内容。
实际上,'\n'
应该是默认的选择。除非你想要明确地刷新流(你什么时候以及为什么会这样做?),否则根本不需要使用 std::endl
。
当然,许多书籍和教程将 std::endl
用作默认值。这是不幸的,并且可能导致严重的性能问题。
我认为使用 '\n'
和使用 "\n"
之间几乎没有区别,但是后者是一个由(两个)字符组成的数组,需要逐个字符打印,需要设置循环,比输出单个字符更复杂。当然,在进行 IO 时,这很少有影响,但如果有疑问,当您想要输出一个字符时,请输出一个字符,而不是整个字符串字面量。
这样做的一个好处是,在您的代码中,您可以传达您打算仅输出单个字符,并且没有不小心输出多个字符。
1 请注意,默认情况下,std::cout
与 std::cin
绑定,在任何输入操作之前,都会刷新 std::cout
,这样任何提示信息都将在用户输入之前得到打印。