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)
Défini dans l'en-tête <ios>
(1)
std:: ios_base & nounitbuf ( std:: ios_base & str ) ;
(2)

Active ou désactive le vidage automatique du flux de sortie après toute opération de sortie. N'a aucun effet sur l'entrée.

1) Active le drapeau unitbuf dans le flux str comme en appelant str. setf ( std:: ios_base :: unitbuf ) .
2) Désactive le drapeau unitbuf dans le flux str comme en appelant str. unsetf ( std:: ios_base :: unitbuf ) .

Ceci est un manipulateur d'E/S, il peut être appelé avec une expression telle que out << std :: unitbuf pour tout out de type std::basic_ostream ou avec une expression telle que in >> std :: unitbuf pour tout in de type std::basic_istream .

Table des matières

Notes

Le vidage est effectué dans le destructeur de l'objet std::basic_ostream::sentry , qui appelle str. rdbuf ( ) - > pubsync ( ) si str. flags ( ) & std:: ios_base :: unitbuf est true .

Les objets de sortie standard std::cerr et std::wcerr ont leur bit unitbuf défini par défaut.

Paramètres

str - référence au flux d'E/S

Valeur de retour

str (référence au flux après manipulation).

Exemple

Sans std::unitbuf ou un autre vidage explicite, la sortie est identique, mais n'apparaît pas en temps réel.

#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';
}

Sortie :

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

Voir aussi

vide le tampon du flux de sortie
(modèle de fonction)
affiche ' \n ' et vide le tampon du flux de sortie
(modèle de fonction)