Namespaces
Variants

std:: flush

From cppreference.net
< cpp ‎ | io ‎ | manip
Definiert in Header <ostream>
template < class CharT, class Traits >
std:: basic_ostream < CharT, Traits > & flush ( std:: basic_ostream < CharT, Traits > & os ) ;

Leert die Ausgabesequenz os wie durch den Aufruf von os. flush ( ) .

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

Inhaltsverzeichnis

Hinweise

Dieser Manipulator kann verwendet werden, um sofort eine unvollständige Ausgabeziele zu erzeugen, z.B. bei der Anzeige von Ausgaben eines langlaufenden Prozesses, der Protokollierung von Aktivitäten mehrerer Threads oder der Protokollierung von Aktivitäten eines Programms, das unerwartet abstürzen könnte. Ein explizites Leeren des std::cout ist ebenfalls notwendig vor einem Aufruf von std::system , wenn der gestartete Prozess Bildschirm-E/A durchführt (ein häufiges Beispiel ist std:: system ( "pause" ) unter Windows). In den meisten anderen üblichen interaktiven E/A-Szenarien ist std::endl redundant bei Verwendung mit std::cout , weil jede Eingabe von std::cin , Ausgabe an std::cerr oder Programmbeendigung einen Aufruf von std:: cout . flush ( ) erzwingt.

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

Wenn jeder Ausgabevorgang gepuffert werden muss, kann der std::unitbuf Manipulator verwendet werden.

Parameter

os - Referenz auf den Ausgabestream

Rückgabewert

os (Referenz auf den Stream nach der Manipulation).

Beispiel

Ohne std::flush wäre die Ausgabe dieselbe, könnte aber 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 ...

Siehe auch

steuert, ob die Ausgabe nach jedem Vorgang geleert wird
(Funktion)
gibt ' \n ' aus und leert den Ausgabestrom
(Funktionsschablone)
synchronisiert mit dem zugrundeliegenden Speichergerät
(öffentliche Elementfunktion von std::basic_ostream<CharT,Traits> )