问题
I've read the difference between std::endl
and '\n'
is that std::endl
flushes the buffer and '\n'
doesn't. However, as far as I know stdout
on linux is line-buffered anyway, so does it mean that std::cout << ... << std::endl
is the same as std::cout << ... << '\n'
?
回答1:
std::ostream os;
os << std::endl; // more concise
os << '\n' << std::flush; // more explicit about flushing
Those two lines have the exact same effect.
The manual flushing is often a waste of time:
If the output stream is line-buffered, which should be the case for
std::cout
if it connects to an interactive terminal and the implementation can detect that, then printing\n
already flushes.If the output stream is paired with an input stream you read from directly afterwards (
std::cout
andstd::cin
are paired), then reading already flushes.If you nobody waits for the data to arrive at its destination, flushing is again just going to waste.
回答2:
This std::cout << ... << std::endl
and this std::cout << ... << '\n'
are not exactly the same. In the last one, the newline \n
is streamed to the output. In most cases this will be interpreted by a console as a newline. But std::endl
means (as you already mentioned) exactly flush and newline in the output console.
Assume you would write this in a document. In Linux the \n
is sufficient. But Windows expects \r\n
. So the new lines will not occur using \n
and e.g. Notepad++ in Windows.
来源:https://stackoverflow.com/questions/64253865/whats-the-difference-between-stdendl-and-n