user2763052 Asked: 2020-06-25 09:27:47 +0800 CST 2020-06-25 09:27:47 +0800 CST 2020-06-25 09:27:47 +0800 CST C++:标准:endl VS \n 772 我知道这两种制作新行的方法之间的唯一区别是第一种方法也清空了输出缓冲区。你能给我看一个实际的例子,你可以看到使用一个和另一个的区别吗? c++ 1 Answers Voted Best Answer NaCl 2020-06-25T09:59:53+08:002020-06-25T09:59:53+08:00 取自这里和这里,解释如下: 是'\n'一个字符,称为“换行”或“单独的馈送”,由显示为空表示,但它只是将光标定位在新行上以继续输入。 虽然它std::endl相当于:std::cout << "\n" << std::flush. 它们的区别非常明显,因为调用字符\n只涉及连接单个字符串,但使用std::endl调用缓冲区清理(这回答了你的问题)。 可以使用的情况,我们用第一个链接的代码来试试: #include <string> #include <iostream> int main() { std::string s(1, 'x'); for (int i = 0; i < 1000000; ++i) { std::cout << s << std::endl; } return 0; } 使用以下设置: clang++ -o endl -O3 endl.cpp && time ./endl >rubbish 返回以下结果: real 0m4.518s user 0m1.080s sys 0m3.311s 虽然相同的代码只有转义: #include <string> #include <iostream> int main() { std::string s(1, 'x'); for (int i = 0; i < 1000000; ++i) { std::cout << s << '\n'; } return 0; } 和相同的设置: clang++ -o endl -O3 endl.cpp && time ./endl >rubbish 产生这些结果: real 0m0.263s user 0m0.236s sys 0m0.008s 响应时间效率更高,因为缓冲区没有“强制”被清除。 当然,这是在您不需要清理输出缓冲区的假设\n情况下,但正如我之前提到的,两者之间没有太大区别,总是会为新行打印转义字符。剩下最后一个细节:唯一的区别是性能。 我希望它对你有帮助。
取自这里和这里,解释如下:
是
'\n'
一个字符,称为“换行”或“单独的馈送”,由显示为空表示,但它只是将光标定位在新行上以继续输入。虽然它
std::endl
相当于:std::cout << "\n" << std::flush
.它们的区别非常明显,因为调用字符
\n
只涉及连接单个字符串,但使用std::endl
调用缓冲区清理(这回答了你的问题)。可以使用的情况,我们用第一个链接的代码来试试:
使用以下设置:
返回以下结果:
虽然相同的代码只有转义:
和相同的设置:
产生这些结果:
响应时间效率更高,因为缓冲区没有“强制”被清除。
当然,这是在您不需要清理输出缓冲区的假设
\n
情况下,但正如我之前提到的,两者之间没有太大区别,总是会为新行打印转义字符。剩下最后一个细节:唯一的区别是性能。我希望它对你有帮助。