Проще говоря, какова цель flush () в ostream?

По определению взято из: http://www.cplusplus.com/reference/iostream/ostream/flush/ , Непонятно, почему функция существует и для какой цели вы бы ее использовали. Почему бы не вызывать flush () каждый раз, когда вы пишете в поток?

3

Решение

По всей вероятности, слово flush исходит именно от того, что вы смываете в реальной жизни. Туалет…

Итак, давайте попробуем аналогию с туалетом:

Промывка каждый раз, когда новый падает в миску, очень трудоемка и приводит к полной потере воды. Это большая проблема сегодня, когда все пытаются быть экологически чистыми.

Так что вы делаете вместо этого? Вы буферизуете это, сохраняя все это и сбрасывая один раз в конце. Если по какой-либо причине вы всегда можете «преждевременно» промыть где-то посередине, когда вы еще не закончили.


Потоки C ++ (помимо всего прочего) работают примерно так же. Чтобы уменьшить накладные расходы и повысить производительность, поток буферизует свое содержимое и только периодически «сбрасывает» его. Недостатком этого является то, что вы можете получить «отложенное» поведение, как в этом вопросе: Почему printf не сбрасывается после вызова, если в строке формата нет новой строки?

Так вот что flush() для. Чтобы позволить вам переопределить буферизацию.

22

Другие решения

Запись файла на жесткий диск по одному символу за раз неэффективна. Отправка пакета по сети для каждого символа неэффективна. Поэтому потоковая передача часто кешируется. flush() это просто способ управления «вручную» во время потоковой передачи, когда кэш должен быть очищен, а материал должен быть действительно отправлен или записан.

1

По вопросам рекламы [email protected]