Namespaces
Variants

std:: flush

From cppreference.net
< cpp ‎ | io ‎ | manip
Défini dans l'en-tête <ostream>
template < class CharT, class Traits >
std:: basic_ostream < CharT, Traits > & flush ( std:: basic_ostream < CharT, Traits > & os ) ;

Vide la séquence de sortie os comme si en appelant os. flush ( ) .

Ceci est un manipulateur d'E/S en sortie uniquement, il peut être appelé avec une expression telle que out << std :: flush pour tout out de type std::basic_ostream .

Table des matières

Notes

Ce manipulateur peut être utilisé pour produire immédiatement une ligne de sortie incomplète, par exemple lors de l'affichage de la sortie d'un processus de longue durée, de la journalisation de l'activité de multiples threads ou de la journalisation de l'activité d'un programme susceptible de planter de manière inattendue. Un vidage explicite de std::cout est également nécessaire avant un appel à std::system , si le processus créé effectue toute opération d'E/S d'écran (un exemple courant est std:: system ( "pause" ) sous Windows). Dans la plupart des autres scénarios interactifs d'E/S habituels, std::endl est redondant lorsqu'il est utilisé avec std::cout car toute entrée depuis std::cin , sortie vers std::cerr , ou terminaison du programme force un appel à std:: cout . flush ( ) .

Lorsqu'une ligne complète de sortie doit être vidée, le std::endl manipulateur peut être utilisé.

Lorsque chaque opération de sortie doit être vidée, le manipulateur std::unitbuf peut être utilisé.

Paramètres

os - référence au flux de sortie

Valeur de retour

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

Exemple

Sans std::flush , la sortie serait la même, mais pourrait ne pas apparaître 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) << " ... "
              << 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';
}

Sortie possible :

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

Voir aussi

contrôle si la sortie est vidée après chaque opération
(fonction)
affiche ' \n ' et vide le flux de sortie
(modèle de fonction)
se synchronise avec le dispositif de stockage sous-jacent
(fonction membre publique de std::basic_ostream<CharT,Traits> )