std::unitbuf, std::nounitbuf
Материал из cppreference.com
![]() |
Эта страница была переведена автоматически с английской версии вики используя Переводчик Google. Перевод может содержать ошибки и странные формулировки. Наведите курсор на текст, чтобы увидеть оригинал. Щёлкните здесь, чтобы увидеть английскую версию этой страницы. (Вы можете помочь в исправлении ошибок и улучшении перевода. Для инструкций перейдите по ссылке.) |
Определено в заголовочном файле <ios>
|
||
std::ios_base& unitbuf( std::ios_base& str ); |
(1) | |
std::ios_base& nounitbuf( std::ios_base& str ); |
(2) | |
Включает или выключает автоматическую промывку выходного потока после любой операции вывода. Не влияет на входе.
1) Оригинал:
Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
позволяет
2) unitbuf
флага в потоке str
как при вызове str.setf(std::ios_base::unitbuf)Оригинал:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
отключает
unitbuf
флага в потоке str
как при вызове str.unsetf(std::ios_base::unitbuf)Оригинал:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Это I / O манипулятора, его можно назвать с выражением таких как out << std::unitbuf для любого типа
out
std::basic_ostream или выражения, такие как in >> std::unitbuf для любого типа in
std::basic_istream.Оригинал:
This is an I/O manipulator, it may be called with an expression such as out << std::unitbuf for any
out
of type std::basic_ostream or with an expression such as in >> std::unitbuf for any in
of type std::basic_istream.Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Содержание |
[править] Заметки
Промывка осуществляется в деструкторе std::basic_ostream::sentry объект, который вызывает str.rdbuf()->pubsync() если str.flags() & std::ios_base::unitbuf == true.
Оригинал:
Flushing is performed in the destructor of the std::basic_ostream::sentry object, which calls str.rdbuf()->pubsync() if str.flags() & std::ios_base::unitbuf == true.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Стандартные объекты выход std::cerr и std::wcerr их
unitbuf
бит установлен по умолчанию.Оригинал:
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Параметры
str | — | ссылка на поток ввода / вывода
Оригинал: reference to I/O stream Текст был переведён автоматически используя Переводчик Google. Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда. |
[править] Возвращаемое значение
str
(ссылка на поток после манипуляций)Оригинал:
str
(reference to the stream after manipulation)Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
[править] Пример
Без STD :: unitbuf или другого явного флеш, на выходе то же самое, но не отображается в режиме реального времени .
Оригинал:
Without std::unitbuf or another explicit flush, the output is the same, but does not appear in real time.
Текст был переведён автоматически используя Переводчик Google.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Вы можете проверить и исправить перевод. Для инструкций щёлкните сюда.
Запустить этот код
#include <iostream> #include <chrono> template<typename Diff> void log_progress(Diff d) { std::cout << "..(" << std::chrono::duration_cast<std::chrono::milliseconds>(d).count() << " ms).."; } int main() { volatile int sink=0; std::cout << std::unitbuf; // enable automatic flushing 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'; }
Вывод:
..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..
[править] См. также
очищает выходной поток (шаблон функции) | |
выводит '\n' и очищает выходной поток (шаблон функции) |