Spec-Zone.ru › C++

std::unitbuf, std::nounitbuf

Определено в заголовке <ios>
std::ios_base& unitbuf( std::ios_base& str );
(1)
std::ios_base& nounitbuf( std::ios_base& str );
(2)

Включает или отключает автоматическую очистку выходного потока после любой операции вывода. Не оказывает влияния на ввод.

1) Включает флаг unitbuf в потоке str так, как если бы было вызвана функция str.setf(std::ios_base::unitbuf).
2) Отключает флаг 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 ...

См. также

flush
очищает выходной поток
(шаблон функции)
endl
выводит '\n' и очищает выходной поток
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/manip/unitbuf

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API