Из черновика стандартного документа C ++ 17:
30.4.3 Узкие объекты потока [thin.stream.objects]
istream cin;
1 Объект cinуправляет вводом из буфера потока, связанного с объектом stdin, объявленным в <cstdio>(30.11.1).
2 После cinинициализации объекта cin.tie()возвращается &cout. В остальном его состояние такое же, как требуется для basic_ios<char>::init(30.5.5.2).
ostream cout;
3 Объект coutуправляет выводом в буфер потока, связанный с объектом stdout, объявленным в <cstdio>(30.11.1).
ostream cerr;
4 Объект cerrуправляет выводом в буфер потока, связанный с объектом stderr, объявленным в <cstdio>(30.11.1).
5 После cerrинициализации объекта cerr.flags() & unitbufненулевое значение и cerr.tie()возвращается &cout. В остальном его состояние такое же, как требуется для basic_ios<char>::init(30.5.5.2).
ostream clog;
6 Объект clogуправляет выводом в буфер потока, связанный с объектом stderr, объявленным в <cstdio>(30.11.1).
Обсуждение ...
coutпишет в stdout; cerrи clogчтобыstderr
Стандартный выход ( stdout) предназначен для получения не содержащих ошибок, недиагностических выходных данных из программы, таких как выходные данные успешной обработки, которые могут быть отображены конечному пользователю или переданы на какой-либо дальнейший этап обработки.
Стандартная ошибка ( stderr) предназначена для диагностического вывода, такого как предупреждения и сообщения об ошибках, которые указывают на то, что программа не выдала или, возможно, не выдала вывод, который мог бы ожидать пользователь. Этот ввод может отображаться для конечного пользователя, даже если выходные данные передаются на этап дальнейшей обработки.
cinи cerrпривязаны кcout
Оба они сбрасываются coutперед обработкой самих операций ввода-вывода. Это гарантирует, что отправляемые приглашения coutбудут видны до того, как программа будет блокирована для чтения ввода cin, и что предыдущий вывод coutбудет сброшен перед записью ошибки cerr, что сохраняет сообщения в хронологическом порядке их генерации, когда оба направлены на один и тот же терминал / файл / так далее..
Это контрастирует с тем, что clogесли вы напишете там, он не будет буферизован и ни к чему не привязан, поэтому он будет буферизовать приличный объем журналов перед сбросом. Это обеспечивает наивысшую пропускную способность сообщений, но означает, что сообщения могут не быть быстро видимыми для потенциального потребителя, читающего терминал или заканчивающего журнал.
stdout,stdin(дляcin),stderrкоторый он использует по умолчанию. Я считаю, чтоclogэто простоcerrс изменением буферизации.