Saya belajar C ++ dan saya menemukan sesuatu yang tidak saya mengerti:
Buffer keluaran dapat secara eksplisit dibilas untuk memaksa buffer ditulis. Secara default, membaca
cin
flushescout
;cout
juga di-flush ketika program berakhir secara normal.
Jadi pembilasan buffer (misalnya buffer keluaran): apakah ini membersihkan buffer dengan menghapus semua yang ada di dalamnya atau apakah itu membersihkan buffer dengan mengeluarkan semua yang ada di dalamnya? Atau apakah pembilasan buffer berarti sesuatu yang sangat berbeda?
Anda telah mengutip jawabannya:
Artinya, Anda mungkin perlu "mengosongkan" keluaran agar dapat ditulis ke aliran yang mendasarinya (yang mungkin berupa file, atau dalam contoh yang terdaftar, terminal).
Umumnya, stdout / cout adalah baris-buffer: keluaran tidak dikirim ke OS sampai Anda menulis baris baru atau secara eksplisit membersihkan buffer. Keuntungannya adalah sesuatu seperti
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
menyebabkan hanya satu penulisan ke "file" yang mendasarinya, bukan enam, yang jauh lebih baik untuk kinerja. Kerugiannya adalah kode seperti:akan mengeluarkan
.....
sekaligus (untuksleep
implementasi yang tepat , lihat pertanyaan ini ). Dalam kasus seperti itu, Anda akan menginginkan tambahan<< std::flush
untuk memastikan bahwa output ditampilkan.Membaca
cin
flushescout
sehingga Anda tidak memerlukan flush eksplisit untuk melakukan ini:sumber
sleep()
(POSIX) denganSleep()
(Windows)cout
dengan namespace (yaitu,std::cout
) tetapi tidak melakukannya untukendl
, yang juga harus memerlukan kualifikasi itu.Kosongkan buffer dengan mengeluarkan semuanya.
sumber