问题
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::coutif it connects to an interactive terminal and the implementation can detect that, then printing\nalready flushes.If the output stream is paired with an input stream you read from directly afterwards (
std::coutandstd::cinare 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