Ich lerne C ++ und habe etwas gefunden, das ich nicht verstehen kann:
Ausgabepuffer können explizit geleert werden, um das Schreiben des Puffers zu erzwingen. Standardmäßig wird das Lesen von
cin
Flushes angezeigtcout
.cout
wird auch geleert, wenn das Programm normal endet.
Leeren Sie also den Puffer (zum Beispiel einen Ausgabepuffer): Löscht dies den Puffer, indem Sie alles darin löschen, oder löscht es den Puffer, indem Sie alles darin ausgeben? Oder bedeutet das Spülen des Puffers etwas völlig anderes?
Sie haben die Antwort zitiert:
Das heißt, Sie müssen möglicherweise die Ausgabe "leeren", damit sie in den zugrunde liegenden Stream (der eine Datei oder in den aufgeführten Beispielen ein Terminal sein kann) geschrieben wird.
Im Allgemeinen ist stdout / cout zeilengepuffert: Die Ausgabe wird erst an das Betriebssystem gesendet, wenn Sie eine neue Zeile schreiben oder den Puffer explizit leeren. Der Vorteil ist, dass so etwas
std::cout << "Mouse moved (" << p.x << ", " << p.y << ")" << endl
nur einen Schreibvorgang in die zugrunde liegende "Datei" anstelle von sechs verursacht, was für die Leistung viel besser ist. Der Nachteil ist, dass ein Code wie:wird
.....
sofort ausgegeben (genauesleep
Implementierung siehe diese Frage ). In solchen Fällen benötigen Sie eine zusätzliche,<< std::flush
um sicherzustellen, dass die Ausgabe angezeigt wird.Lesen Sie
cin
Flushes,cout
damit Sie dazu keine explizite Flush benötigen:quelle
sleep()
(POSIX) mitSleep()
(Windows)cout
mit einem Namespace (dhstd::cout
), haben dies jedoch nicht für den getan, für denendl
auch diese Qualifikation erforderlich sein sollte.Löschen Sie den Puffer, indem Sie alles ausgeben.
quelle