许多c++书籍包含这样的示例代码…
std::cout << "Test line" << std::endl;
...所以我也一直这么做。但我看到过很多开发者写的这样的代码:
std::cout << "Test line\n";
是否有技术上的原因,更喜欢其中一个,或者只是编码风格的问题?
许多c++书籍包含这样的示例代码…
std::cout << "Test line" << std::endl;
...所以我也一直这么做。但我看到过很多开发者写的这样的代码:
std::cout << "Test line\n";
是否有技术上的原因,更喜欢其中一个,或者只是编码风格的问题?
当前回答
可能存在性能问题,std::endl强制刷新输出流。
其他回答
我从来没见过有人说“\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个0。
我在任何地方都找不到关于它的任何东西,但它会用clang, gcc和msvc复制。
我第一次看到它的时候非常困惑。
可能存在性能问题,std::endl强制刷新输出流。
它们都将写入适当的行尾字符。除此之外,endl将导致缓冲区被提交。在执行文件I/O时,通常不希望使用endl,因为不必要的提交会影响性能。
不同的行结束字符无关紧要,假设文件以文本模式打开,除非您要求二进制,否则您将得到文本模式。编译后的程序将为被编译的系统写出正确的东西。
唯一的区别是std::endl会刷新输出缓冲区,而'\n'不会。如果不希望频繁刷新缓冲区,请使用'\n'。如果你这样做(例如,如果你想获得所有的输出,而程序是不稳定的),使用std::endl。
这种差异可以用下面的例子来说明:
std::cout << std::endl;
等于
std::cout << '\n' << std::flush;
So,
使用std::endl如果您想强制立即刷新输出。 如果担心性能问题,请使用\n(如果使用<<操作符,则可能不是这样)。
我在大多数行上使用\n。 然后在段落末尾使用std::endl(但这只是一个习惯,通常不是必需的)。
与其他声明相反,\n字符仅当流去往文件(std::cin和std::cout是特殊的,但仍然是文件(或类文件)时才会映射到行序列的正确平台末端。