Just reading an old but interesting article by "Scott Meyers"
http://aristeia.com/Papers/C++ReportColumns/novdec95.pdf
Basically it is about preferring to use '\n'
over std::endl
(which I agree with and have used the same augment for years).
BUT the last section indicates this was not included in his book because the whole thing was rendered moot because of two points:
std::cout
was not buffered.ios::unitbuf
on std::cout is not explicitly defined (thus implementation dependent).I did a quick look but could not find an explicit standards reference for 1
was true. Is std::cout
unbuffered contrary to what I have always understood?
Yes, it's buffered:
C++11 27.4.2 [narrow.stream.objects]/3 : The object
cout
controls output to a stream buffer associated with the objectstdout
The article refers to a 1995 draft version of what became the C++98 standard. I've no idea whether or not that might have said something different.
As for point 2, unitbuf
is initially false on all streams (specified by the post-conditions of the basic_ios
constructor), except for cerr
and wcerr
which explicitly specify otherwise. Again, that may well be different in the ancient draft being referred to.