Кто-нибудь знает разницу между endl (cout) и cout << endl? - PullRequest
4 голосов
/ 04 марта 2012

Я думал, что это одно и то же, но когда я отправил код онлайн-судье (с endl(cout)), он дал мне вердикт "Неправильный ответ", затем я попытался отправить еще один с cout << endl, и судья принял код! Кто-нибудь знает разницу между этими командами?

Ответы [ 4 ]

3 голосов
/ 04 марта 2012

Я не знаю ни одного.

std::endl - это функция, которая принимает поток и возвращает поток:

ostream& endl ( ostream& os );

Когда вы применяете его к std::cout,он просто сразу применяет функцию.

С другой стороны, std::basic_ostream имеет перегрузку operator<< с сигнатурой:

template <typename C, typename T>
basic_ostream<C,T>& operator<<(basic_ostream<C,T>& (*pf)(basic_ostream<C,T>&));

, которая также сразу применяет функцию.

Таким образом, технически нет никакой разницы, хотя stream std::cout << std::endl более идиоматичен.Вполне возможно, что бот-судья упрощен и не осознает этого.

2 голосов
/ 04 марта 2012

Единственное отличие состоит в том, что endl(cout) считается глобальной функцией, тогда как в cout << endl, endl рассматривается как манипулятор.Но они имеют одинаковый эффект.

1 голос
/ 20 июля 2016

Ответы выше верны! Кроме того, в зависимости от того, используете ли вы << endl; или endl(cout), это может уменьшить количество строк в вашем коде.

Пример:

Вы можете иметь что-то вроде:

cout << "Hello World" << endl;

OR

cout << "Hello World";

endl(cout);

ОДНАКО, cout << "Hello World" << endl(cout); // НЕ работает

Таким образом, в этом примере это 2 строки против 1 строки.

1 голос
/ 04 марта 2012

Нет различий в поведении между этими двумя формами.Обе ссылаются на одну и ту же функцию endl, которую можно использовать как манипулятор (cout << endl) или как свободную функцию (endl(cout)).

...