Я изучаю C ++ и обнаружил то, чего не могу понять:
Буферы вывода могут быть явно очищены для принудительной записи буфера. По умолчанию чтение
cin
сбрасываетсяcout
;cout
также сбрасывается при нормальном завершении программы.
Итак, очистка буфера (например, буфера вывода): очищает ли это буфер, удаляя все в нем, или он очищает буфер, выводя все в нем? Или промывка буфера означает совсем другое?
Вы процитировали ответ:
То есть вам может потребоваться «очистить» вывод, чтобы он был записан в базовый поток (который может быть файлом или, в перечисленных примерах, терминалом).
Как правило, stdout / cout буферизируется по строке: вывод не отправляется в ОС, пока вы не напишете новую строку или не очистите буфер явно. Преимущество в том, что что-то вроде
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
вызывает только одну запись в базовый "файл" вместо шести, что намного лучше для производительности. Недостаток в том, что такой код:будет выводить
.....
сразу (точнуюsleep
реализацию см. в этом вопросе ). В таких случаях вам понадобится дополнительная,<< std::flush
чтобы гарантировать отображение вывода.Чтение
cin
сбросов,cout
поэтому вам не нужно для этого явного сброса:источник
sleep()
(POSIX) сSleep()
(Windows)cout
соответствуете пространству имен (т. Е.std::cout
), Но не сделали этого для классаendl
, что также должно требовать этой квалификации.Очистите буфер, выводя все.
источник