سؤال

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.

نصائح أخرى

The only difference is that endl(cout) is considered as a global function whereas in cout << endl, endl is considered as a manipulator. But they have the same effect.

There is no difference in behaviour between those two forms. Both refer to the same endl function, which can be used as a manipulator (cout << endl) or as a free function (endl(cout)).

Answers above are correct! Also, Depending whether you use << endl; or endl(cout) it could reduce the number of lines in your code.

Example:

You can have something like:

cout << "Hello World" << endl;

OR

cout << "Hello World";

endl(cout);

HOWEVER, cout << "Hello World" << endl(cout); //Does NOT work

So it is 2 lines vs 1 line in this example.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top