c++coutendl

Does anyone know the difference between endl(cout) and cout << endl?


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?


Solution

  • 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.