Dari draf dokumen standar C ++ 17:
30.4.3 Objek aliran sempit [narrow.stream.objects]
istream cin;
1 Objek cin
mengontrol input dari buffer aliran yang terkait dengan objek stdin
, dideklarasikan dalam <cstdio>
(30.11.1).
2 Setelah objek cin
diinisialisasi, cin.tie()
kembali &cout
. basic_ios<char>::init
Statusnya sama dengan yang disyaratkan untuk (30.5.5.2).
ostream cout;
3 Objek cout
mengontrol output ke buffer aliran yang terkait dengan objek stdout
, dideklarasikan dalam <cstdio>
(30.11.1).
ostream cerr;
4 Objek cerr
mengontrol output ke buffer aliran yang terkait dengan objek stderr
, dideklarasikan dalam <cstdio>
(30.11.1).
5 Setelah objek cerr
diinisialisasi, cerr.flags() & unitbuf
bukan nol dan cerr.tie()
kembali &cout
. basic_ios<char>::init
Statusnya sama dengan yang disyaratkan untuk (30.5.5.2).
ostream clog;
6 Objek clog
mengontrol output ke buffer aliran yang terkait dengan objek stderr
, dideklarasikan dalam <cstdio>
(30.11.1).
Diskusi...
cout
menulis ke stdout
; cerr
dan clog
untukstderr
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.
cin
dan cerr
terikatcout
Keduanya membilas cout
sebelum menangani sendiri operasi I / O. Ini memastikan prompt yang dikirim ke cout
terlihat sebelum blok program untuk membaca input cin
, dan bahwa output sebelumnya ke cout
dihapus 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
), danstderr
yang digunakan secara default. Saya percayaclog
hanyacerr
dengan perubahan buffering.