2017-12-10 7 views
3

Ich bin ganz neu in Codierung und Programmierung (eigentlich heute gestartet). Ich habe mir ein paar Videos angeschaut und den Anfang einiger Bücher gelesen, um zu sehen, mit welchen ich klicken kann, aber ich habe Probleme, etwas davon zu verstehen.Was genau ist Spülen?

Eines der verwendeten Videos endl und ein anderes verwendet \n in der grundlegenden "Hallo Welt" Einführung. Ich wollte mehr über die Unterschiede zwischen den beiden wissen.

Also, ich verstehe, dass der Unterschied zwischen endl und \n ist, dass endl den Code spülen, während \n wird nicht, die endl macht langsamer. So viel kann ich bei Google suchen.

Wenn ich jedoch nach C++ spülen suche, kann ich aufgrund des Jargons nicht verstehen, was es bedeutet.

Was bedeutet es zu spülen, und wann und warum möchten Sie es tun? Was ist ein Puffer?

Bitte erklären Sie es auf sehr einfache Weise, wenn Sie können.

+0

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

+3

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

+0

@ 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

Antwort

0

Spülen bedeutet, den Puffer zu leeren.

Puffer ist jetzt temporärer Speicherbereich zum Speichern von Daten.

Beide endl und \ n können Zeilenende-Zeichen, aber es gibt geringfügige Unterschied zwischen diesen beiden zu drucken, verwendet werden:

Bei endl der Puffer

Puffer durch Verwendung von internen Anruf gelöscht zu spülen im Falle von \ n wird Neue-Zeile gedruckt wird aber Puffer nicht, da keine zusätzlichen Anruf getätigt wird

so leistungsmäßig gespült, endl ist besser als \ n

+0

Scheint mir, dass Sie wiederholt, was er bereits weiß – feareoc

+0

Leistungsmäßig, endl ist eigentlich schlimmer als \ n. Flushing bedeutet, dass wir den Puffer und den Puffer aus Gründen der Leistung abkürzen, also nein, endl wird nicht für Leistungsprobleme verwendet. –

0

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.