I thought they were the same thing, but when I sent a code to an online judge (with endl(cout)
) it gave me "Wrong answer" verdict, then I tried to send another with cout << endl
and the judge accepted the code! Does anyone know the difference between those commands?
There is none that I know of.
std::endl
is a function that take a stream and return a stream:
ostream& endl ( ostream& os );
When you apply it to std::cout
, it just applies the function right away.
On the other hand, std::basic_ostream
has an overload of operator<<
with the signature:
template <typename C, typename T>
basic_ostream<C,T>& operator<<(basic_ostream<C,T>& (*pf)(basic_ostream<C,T>&));
which will also apply the function right away.
So, technically, there is no difference, even though stream std::cout << std::endl
is more idiomatic. It could be that the judge bot is simplistic though, and does not realizes it.