std:: unitbuf, std:: nounitbuf
|
Défini dans l'en-tête
<ios>
|
||
|
std::
ios_base
&
unitbuf
(
std::
ios_base
&
str
)
;
|
(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.
unitbuf
dans le flux
str
comme en appelant
str.
setf
(
std::
ios_base
::
unitbuf
)
.
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) |