Dari draf dokumen standar C ++ 17:
30.4.3 Objek aliran sempit [narrow.stream.objects]
istream cin;
1 Objek cinmengontrol input dari buffer aliran yang terkait dengan objek stdin, dideklarasikan dalam <cstdio>(30.11.1).
2 Setelah objek cindiinisialisasi, cin.tie()kembali &cout. basic_ios<char>::initStatusnya sama dengan yang disyaratkan untuk (30.5.5.2).
ostream cout;
3 Objek coutmengontrol output ke buffer aliran yang terkait dengan objek stdout, dideklarasikan dalam <cstdio>(30.11.1).
ostream cerr;
4 Objek cerrmengontrol output ke buffer aliran yang terkait dengan objek stderr, dideklarasikan dalam <cstdio>(30.11.1).
5 Setelah objek cerrdiinisialisasi, cerr.flags() & unitbufbukan nol dan cerr.tie()kembali &cout. basic_ios<char>::initStatusnya sama dengan yang disyaratkan untuk (30.5.5.2).
ostream clog;
6 Objek clogmengontrol output ke buffer aliran yang terkait dengan objek stderr, dideklarasikan dalam <cstdio>(30.11.1).
Diskusi...
coutmenulis ke stdout; cerrdan cloguntukstderr
Standard Out ( stdout) dimaksudkan untuk menerima output non-error, non-diagnostik dari program, seperti output dari pemrosesan yang berhasil yang dapat ditampilkan ke pengguna akhir atau dialirkan ke beberapa tahap pemrosesan lebih lanjut.
Kesalahan Standar ( stderr) dimaksudkan untuk keluaran diagnostik, seperti peringatan dan pesan kesalahan yang menunjukkan bahwa program belum atau mungkin tidak menghasilkan keluaran yang diharapkan pengguna. Masukan ini dapat ditampilkan ke pengguna akhir meskipun data keluaran disalurkan ke tahap pemrosesan lebih lanjut.
cindan cerrterikatcout
Keduanya membilas coutsebelum menangani sendiri operasi I / O. Ini memastikan prompt yang dikirim ke coutterlihat sebelum blok program untuk membaca input cin, dan bahwa output sebelumnya ke coutdihapus sebelum menulis kesalahan cerr, yang membuat pesan dalam urutan kronologis pembuatannya ketika keduanya diarahkan ke terminal / file / yang sama dll ..
Ini kontras dengan clog- jika Anda menulis di sana, itu tidak akan di-buffer dan tidak terikat pada apa pun, jadi itu akan menyangga logging dalam jumlah yang layak sebelum dibilas. Ini menghasilkan throughput pesan tertinggi, tetapi berarti pesan mungkin tidak segera terlihat oleh calon konsumen yang membaca terminal atau mengikuti log.
stdout,,stdin(untukcin), danstderryang digunakan secara default. Saya percayacloghanyacerrdengan perubahan buffering.