Difference between revisions of "cpp/io/manip/unitbuf"
(Avoid use a expression which has a different meaning in c++) |
Andreas Krug (Talk | contribs) m (fmt, @@, capitalized 1st letter, {{c}}, ., headers sorted, langlinks) |
||
Line 3: | Line 3: | ||
{{dcl begin}} | {{dcl begin}} | ||
{{dcl header|ios}} | {{dcl header|ios}} | ||
− | {{dcl | num = 1| | + | {{dcl|num=1| |
std::ios_base& unitbuf( std::ios_base& str ); | std::ios_base& unitbuf( std::ios_base& str ); | ||
}} | }} | ||
− | {{dcl | num = 2| | + | {{dcl|num=2| |
std::ios_base& nounitbuf( std::ios_base& str ); | std::ios_base& nounitbuf( std::ios_base& str ); | ||
}} | }} | ||
Line 13: | Line 13: | ||
Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input. | Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input. | ||
− | 1 | + | @1@ Enables the {{tt|unitbuf}} flag in the stream {{c|str}} as if by calling {{c|str.setf(std::ios_base::unitbuf)}}. |
− | 2 | + | @2@ Disables the {{tt|unitbuf}} flag in the stream {{c|str}} as if by calling {{c|str.unsetf(std::ios_base::unitbuf)}}. |
This is an I/O manipulator, it may be called with an expression such as {{c|out << std::unitbuf}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in >> std::unitbuf}} for any {{tt|in}} of type {{lc|std::basic_istream}}. | This is an I/O manipulator, it may be called with an expression such as {{c|out << std::unitbuf}} for any {{tt|out}} of type {{lc|std::basic_ostream}} or with an expression such as {{c|in >> std::unitbuf}} for any {{tt|in}} of type {{lc|std::basic_istream}}. | ||
Line 26: | Line 26: | ||
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | str | reference to I/O stream }} | + | {{par|str|reference to I/O stream}} |
{{par end}} | {{par end}} | ||
===Return value=== | ===Return value=== | ||
− | + | {{c|str}} (reference to the stream after manipulation). | |
− | {{ | + | |
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | + | |Without std::unitbuf or another explicit flush, the output is the same, but does not appear in real time. | |
− | + | |code= | |
+ | #include <chrono> | ||
#include <iostream> | #include <iostream> | ||
− | |||
template<typename Diff> | template<typename Diff> | ||
Line 64: | Line 63: | ||
std::cout << '\n'; | std::cout << '\n'; | ||
} | } | ||
− | + | |output= | |
..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms).. | ..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms).. | ||
}} | }} | ||
Line 70: | Line 69: | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/io/manip/dsc flush}} | + | {{dsc inc|cpp/io/manip/dsc flush}} |
− | {{dsc inc | cpp/io/manip/dsc endl}} | + | {{dsc inc|cpp/io/manip/dsc endl}} |
{{dsc end}} | {{dsc end}} | ||
− | + | {{langlinks|de|es|fr|it|ja|pt|ru|zh}} | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + |
Revision as of 23:24, 15 September 2023
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 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.
Contents |
Notes
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 is true.
The standard output objects std::cerr and std::wcerr have their unitbuf
bit set by default.
Parameters
str | - | reference to I/O stream |
Return value
str (reference to the stream after manipulation).
Example
Without std::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).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'; }
Output:
..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..
See also
flushes the output stream (function template) | |
outputs '\n' and flushes the output stream (function template) |