Namensräume
Varianten
Aktionen

std::flush

Von cppreference.com
< cpp‎ | io‎ | manip
 
 
 
Input/output-Manipulatoren
Formatierung von Gleitkommazahlen
Ganzzahlformatierung
Boolean-Formatierung
Feldbreiten- und Füllzeichensteuerung
Andere Formatierungen
Leerzeichenverarbeitung
Ausgabe-Flushen
flush
(C++20)  

Statusflags-Manipulation
Zeit- und Geld-I/O
(C++11)
(C++11)
(C++11)
(C++11)
Gequoteter Manipulator
(C++14)
 
Definiert in Header <ostream>
template< class CharT, class Traits >
std::basic_ostream<CharT, Traits>& flush( std::basic_ostream<CharT, Traits>& os );

Spült die Ausgabesequenz os, als ob os.flush() aufgerufen würde.

Dies ist ein reiner Ausgabe-I/O-Manipulator; er kann mit einem Ausdruck wie out << std::flush für jedes out vom Typ std::basic_ostream verwendet werden.

Inhalt

[edit] Anmerkungen

Dieser Manipulator kann verwendet werden, um eine unvollständige Zeile der Ausgabe sofort zu erzeugen, z.B. wenn die Ausgabe eines lang laufenden Prozesses, die Protokollierung von Aktivitäten mehrerer Threads oder die Protokollierung von Aktivitäten eines Programms, das unerwartet abstürzen könnte, angezeigt wird. Ein explizites Spülen von std::cout ist auch vor einem Aufruf von std::system notwendig, wenn der gestartete Prozess jegliche Bildschirmausgabe durchführt (ein häufiges Beispiel ist std::system("pause") unter Windows). In den meisten anderen üblichen interaktiven I/O-Szenarien ist der Manipulator std::endl überflüssig, wenn er mit std::cout verwendet wird, da jede Eingabe von std::cin, Ausgabe an std::cerr oder Programmbeendigung einen Aufruf von std::cout.flush() erzwingt.

Wenn eine vollständige Zeile der Ausgabe geleert werden muss, kann der Manipulator std::endl verwendet werden.

Wenn jede Ausgabebetrieb geleert werden muss, kann der Manipulator std::unitbuf verwendet werden.

[edit] Parameter

os - Referenz auf den Ausgabestream

[edit] Rückgabewert

os (Referenz auf den Stream nach der Manipulation).

[edit] Beispiel

Ohne std::flush wäre die Ausgabe die gleiche, würde aber möglicherweise nicht in Echtzeit erscheinen.

#include <chrono>
#include <iostream>
 
template<typename Diff>
void log_progress(Diff d)
{
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d) << " ... "
              << std::flush;
}
 
int main()
{
    volatile int sink = 0;
 
    auto t1 = std::chrono::high_resolution_clock::now();
    for (int j = 0; j < 5; ++j)
    {
        for (int n = 0; n < 10000; ++n)
            for (int m = 0; m < 20000; ++m)
                sink += m * n; // do some work
        auto now = std::chrono::high_resolution_clock::now();
        log_progress(now - t1);
    }
    std::cout << '\n';
}

Mögliche Ausgabe

567ms ... 1137ms ... 1707ms ... 2269ms ... 2842ms ...

[edit] Siehe auch

Steuert, ob die Ausgabe nach jeder Operation geflusht wird
(Funktion) [bearbeiten]
Gibt '\n' aus und spült den Ausgabestrom
(Funktion-Template) [bearbeiten]
synchronisiert mit dem zugrunde liegenden Speichermedium
(public member function of std::basic_ostream<CharT,Traits>) [bearbeiten]