std:: unitbuf, std:: nounitbuf
|
Определено в заголовке
<ios>
|
||
|
std::
ios_base
&
unitbuf
(
std::
ios_base
&
str
)
;
|
(1) | |
|
std::
ios_base
&
nounitbuf
(
std::
ios_base
&
str
)
;
|
(2) | |
Включает или отключает автоматическую очистку выходного потока после любой операции вывода. Не влияет на ввод.
unitbuf
в потоке
str
как если бы был вызван
str.
setf
(
std::
ios_base
::
unitbuf
)
.
unitbuf
в потоке
str
как если бы был выполнен вызов
str.
unsetf
(
std::
ios_base
::
unitbuf
)
.
Это манипулятор ввода-вывода, который может быть вызван выражением вида
out
<<
std
::
unitbuf
для любого
out
типа
std::basic_ostream
или выражением вида
in
>>
std
::
unitbuf
для любого
in
типа
std::basic_istream
.
Содержание |
Примечания
Сброс буфера выполняется в деструкторе объекта std::basic_ostream::sentry , который вызывает str. rdbuf ( ) - > pubsync ( ) , если str. flags ( ) & std:: ios_base :: unitbuf равно true .
Стандартные объекты вывода
std::cerr
и
std::wcerr
имеют установленный по умолчанию бит
unitbuf
.
Параметры
| str | - | ссылка на поток ввода-вывода |
Возвращаемое значение
str (ссылка на поток после манипуляции).
Пример
Без
std::unitbuf
или другого явного сброса буфера, вывод будет таким же, но не отображается в реальном времени.
#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'; }
Вывод:
571ms ... 1146ms ... 1722ms ... 2294ms ... 2865ms ...
Смотрите также
|
очищает выходной поток
(шаблон функции) |
|
|
выводит
'
\n
'
и очищает выходной поток
(шаблон функции) |