Namespaces
Variants

std:: unitbuf, std:: nounitbuf

From cppreference.net
< cpp ‎ | io ‎ | manip
Input/output manipulators
Floating-point formatting
Integer formatting
Boolean formatting
Field width and fill control
Other formatting
Whitespace processing
Output flushing
unitbuf nounitbuf
Status flags manipulation
Time and money I/O
(C++11)
(C++11)
(C++11)
(C++11)
Quoted manipulator
(C++14)
Definiert in Header <ios>
(1)
std:: ios_base & nounitbuf ( std:: ios_base & str ) ;
(2)

Aktiviert oder deaktiviert das automatische Leeren des Ausgabestroms nach jedem Ausgabevorgang. Hat keine Auswirkung auf die Eingabe.

1) Aktiviert das unitbuf -Flag im Stream str , als ob durch Aufruf von str. setf ( std:: ios_base :: unitbuf ) .
2) Deaktiviert das unitbuf -Flag im Stream str , als ob durch Aufruf von str. unsetf ( std:: ios_base :: unitbuf ) .

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.

Inhaltsverzeichnis

Hinweise

Das Leeren des Puffers erfolgt im Destruktor des std::basic_ostream::sentry -Objekts, welcher str. rdbuf ( ) - > pubsync ( ) aufruft, falls str. flags ( ) & std:: ios_base :: unitbuf den Wert true hat.

Die Standardausgabeobjekte std::cerr und std::wcerr haben ihren unitbuf -Bit standardmäßig gesetzt.

Parameter

str - Referenz auf I/O-Stream

Rückgabewert

str (Referenz auf den Stream nach der Manipulation).

Beispiel

Ohne std::unitbuf oder einen anderen expliziten Flush ist die Ausgabe identisch, erscheint jedoch 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 ...

Siehe auch

leert den Ausgabestream
(Funktions-Template)
gibt ' \n ' aus und leert den Ausgabestream
(Funktions-Template)