Puffer sind temporäre Speicher verwendet den Eingang einer zur Speicherung Prozess, der kann Zeit nehmen.
Es kann entweder sein, keine Daten zu verlieren. Stellen Sie sich eine Kommunikation zwischen einem schnellen und einem langsamen Computer vor. Der schnelle Computer kann Bytes mit einer höheren Rate senden, als der langsame, während der langsame einen Byte verarbeitet, andere kommen dann immer noch an und sie werden in einem Puffer gespeichert, der darauf wartet, verarbeitet zu werden.
Oder es kann entweder aus Leistungsgründen sein. Alle Operationen haben einen statischen Zeitaufwand, der unabhängig von der Größe der von der Operation verarbeiteten Daten ist (sie müssen möglicherweise einige Daten initialisieren, auf Ressourcen warten ...). Wenn diese Kosten nicht vernachlässigbar sind, könnte es interessant sein, diese Kosten so wenig wie möglich zu bezahlen. Also verwenden wir einen Puffer, um mehr Daten zu sammeln und mehrere Operationen zu einer zusammenzuführen.
In Ihrem Fall hat das Drucken auf dem Bildschirm keine vernachlässigbare statische Zeit und deshalb wird standardmäßig ein Puffer verwendet, und die Daten werden nur gedruckt, wenn genügend Bytes empfangen werden.
Das Löschen eines Puffers bedeutet, dass er geleert und gezwungen wird, die darin enthaltenen Daten zu behandeln. Es kann nützlich sein, wenn Sie eine kleine Datenmenge sofort behandeln möchten.
Wenn Sie zum Beispiel "Bitte geben Sie Ihr Alter ein" eingeben und darauf warten, dass der Benutzer eine Nummer eingibt, ist es wünschenswert, dass der Benutzer diese Anfrage tatsächlich sieht! Hier ist also das Löschen des Puffers obligatorisch.
Aber wenn Sie einen Strom von Texten drucken (denken Sie an ein Programm, das viele Texte wie einen Compiler beim Kompilieren eines großen Projekts druckt), ist es besser nicht zu spülen und den Puffer voll zu machen, so dass Sie die statische Zeit nicht verbrauchen für jeden gesendeten Block (z. B. jede Quelldatei für den Compiler). Und flush nach dem letzten Block, um sicher zu gehen, dass wir nicht in der Mitte des Puffers landen, was sehr wahrscheinlich ist.
Hilft die Erklärung [hier] (http://en.cppreference.com/w/cpp/io/basic_ostream/flush)? Ihre Frage ist bei Stack Overflow ein wenig zu kurz gefasst. – user0042
Denken Sie darüber wörtlich nach. Sie lassen etwas Wasser bis zu einer bestimmten Menge in Ihre Badewanne laufen (Badewanne ist der _Buffer_), und mit 'flush()' ziehen Sie den Stecker. – user0042
@ user0042 - ein wörtlicher Denkprozess würde eine Toilette benutzen. Der Vorratsbehälter (Puffer) füllt sich, und durch die Spülung wird Wasser aus dem Vorratsbehälter in die Toilettenschüssel geleitet. – Peter