З проекту стандартного документа C ++ 17:
30.4.3 Вузькі об'єкти потоку [Вузькі.потоки.об'єкти]
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зміна буферизації.