| I/O manipulators | ||||
| Print functions(C++23) | ||||
| C-style I/O | ||||
| Buffers | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++20) | ||||
| Streams | ||||
| Abstractions | ||||
| File I/O | ||||
| String I/O | ||||
| Array I/O | ||||
(C++23) | ||||
(C++23) | ||||
(C++23) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
(C++98/26*) | ||||
| Synchronized Output | ||||
(C++20) | ||||
| Types | ||||
| Error category interface | ||||
(C++11) | ||||
(C++11) |
| Floating-point formatting | |||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||
| Integer formatting | |||||||||||||||||||||||||||||||
| Boolean formatting | |||||||||||||||||||||||||||||||
| Field width and fill control | |||||||||||||||||||||||||||||||
| Other formatting | |||||||||||||||||||||||||||||||
| Whitespace processing | |||||||||||||||||||||||||||||||
| Output flushing | |||||||||||||||||||||||||||||||
|
| ||||||||||||||||||||||||||||||
| Status flags manipulation | |||||||||||||||||||||||||||||||
| Time and money I/O | |||||||||||||||||||||||||||||||
| Quoted manipulator | |||||||||||||||||||||||||||||||
(C++14) | |||||||||||||||||||||||||||||||
Defined in header <ios> | ||
std::ios_base& unitbuf(std::ios_base& str); | (1) | |
std::ios_base& nounitbuf(std::ios_base& str); | (2) | |
Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input.
This is an I/O manipulator, it may be called with an expression such asout<< std::unitbuf for anyout of typestd::basic_ostream or with an expression such asin>> std::unitbuf for anyin of typestd::basic_istream.
Contents |
Flushing is performed in the destructor of thestd::basic_ostream::sentry object, which callsstr.rdbuf()->pubsync() ifstr.flags()&std::ios_base::unitbuf istrue.
The standard output objectsstd::cerr andstd::wcerr have theirunitbuf bit set by default.
| str | - | reference to I/O stream |
str (reference to the stream after manipulation).
Withoutstd::unitbuf or another explicit flush, the output is the same, but does not appear in real time.
#include <chrono>#include <iostream> template<typename Diff>void log_progress(Diff d){std::cout<<std::chrono::duration_cast<std::chrono::milliseconds>(d)<<" ... ";} int main(){volatileint sink=0;std::cout<< std::unitbuf;// enable automatic flushing constauto 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';}
Output:
571ms ... 1146ms ... 1722ms ... 2294ms ... 2865ms ...
| flushes the output stream (function template)[edit] | |
| outputs'\n' and flushes the output stream (function template)[edit] |