Namensräume
Varianten
Aktionen

std::unitbuf, std::nounitbuf

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

unitbufnounitbuf
Statusflags-Manipulation
Zeit- und Geld-I/O
(C++11)
(C++11)
(C++11)
(C++11)
Gequoteter Manipulator
(C++14)
 
Definiert in Header <ios>
std::ios_base& unitbuf( std::ios_base& str );
(1)
std::ios_base& nounitbuf( std::ios_base& str );
(2)

Aktiviert oder deaktiviert das automatische Leeren des Ausgabestreams nach jeder Ausgabeoperation. Hat keine Auswirkung auf die Eingabe.

1) Aktiviert das Flag unitbuf im Stream str, als ob str.setf(std::ios_base::unitbuf) aufgerufen würde.
2) Deaktiviert das Flag unitbuf im Stream str, als ob str.unsetf(std::ios_base::unitbuf) aufgerufen würde.

Dies ist ein I/O-Manipulator. Er kann mit einem Ausdruck wie out << std::unitbuf für jedes out vom Typ std::basic_ostream oder mit einem Ausdruck wie in >> std::unitbuf für jedes in vom Typ std::basic_istream aufgerufen werden.

Inhalt

[bearbeiten] Hinweise

Das Leeren erfolgt im Destruktor des std::basic_ostream::sentry-Objekts, das str.rdbuf()->pubsync() aufruft, wenn str.flags() & std::ios_base::unitbuf true ist.

Die Standard-Ausgabeobjekte std::cerr und std::wcerr haben ihr unitbuf-Bit standardmäßig gesetzt.

[bearbeiten] Parameter

str - Referenz auf einen E/A-Stream.

[bearbeiten] Rückgabewert

str (Referenz auf den Stream nach der Manipulation).

[bearbeiten] Beispiel

Ohne std::unitbuf oder ein anderes explizites Leeren ist die Ausgabe dieselbe, erscheint aber nicht in Echtzeit.

#include <chrono>
#include <iostream>
 
template<typename Diff>
void log_progress(Diff d)
{
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d)
              << " ... ";
}
 
int main()
{
    volatile int sink = 0;
    std::cout << std::unitbuf; // enable automatic flushing
 
    const auto start = 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
        log_progress(std::chrono::high_resolution_clock::now() - start);
    }
    std::cout << '\n';
}

Ausgabe

571ms ... 1146ms ... 1722ms ... 2294ms ... 2865ms ...

[bearbeiten] Siehe auch

Spült den Ausgabestrom
(Funktion-Template) [bearbeiten]
Gibt '\n' aus und spült den Ausgabestrom
(Funktion-Template) [bearbeiten]