Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/io/manip/unitbuf"

From cppreference.com
< cpp‎ | io‎ | manip
m (Text replace - "/sidebar" to "/navbar")
m (r2.7.3) (Robot: Adding de, es, fr, it, ja, pt, ru, zh)
Line 71: Line 71:
 
{{dcl list template | cpp/io/manip/dcl list endl}}
 
{{dcl list template | cpp/io/manip/dcl list endl}}
 
{{dcl list end}}
 
{{dcl list end}}
 +
 +
[[de:cpp/io/manip/unitbuf]]
 +
[[es:cpp/io/manip/unitbuf]]
 +
[[fr:cpp/io/manip/unitbuf]]
 +
[[it:cpp/io/manip/unitbuf]]
 +
[[ja:cpp/io/manip/unitbuf]]
 +
[[pt:cpp/io/manip/unitbuf]]
 +
[[ru:cpp/io/manip/unitbuf]]
 +
[[zh:cpp/io/manip/unitbuf]]

Revision as of 15:50, 2 November 2012

 
 
 
Input/output manipulators
Floating-point formatting
Integer formatting
Boolean formatting
Field width and fill control
Other formatting
Whitespace processing
Output flushing
(C++20)  

unitbufnounitbuf
Status flags manipulation
Time and money I/O
(C++11)
(C++11)
(C++11)
(C++11)
Quoted manipulator
(C++14)
 

Template:ddcl list begin <tr class="t-dsc-header">

<td>
Defined in header <ios>
</td>

<td></td> <td></td> </tr> <tr class="t-dcl ">

<td >
std::ios_base& unitbuf( std::ios_base& str );
</td>

<td > (1) </td> <td class="t-dcl-nopad"> </td> </tr> <tr class="t-dcl ">

<td >
std::ios_base& nounitbuf( std::ios_base& str );
</td>

<td > (2) </td> <td class="t-dcl-nopad"> </td> </tr> Template:ddcl list end

Enables or disables automatic flushing of the output stream after any output operation. Has no effect on input.

1) enables the unitbuf flag in the stream str as if by calling str.setf(std::ios_base::unitbuf)

2) disables the unitbuf flag in the stream str as if by calling str.unsetf(std::ios_base::unitbuf)

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 == 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 <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';
}

Output:

..(450 ms)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..

See also

Template:cpp/io/manip/dcl list flushTemplate:cpp/io/manip/dcl list endl