cpp / latest / io / basic_ostream / flush.html /

std::basic_ostream<CharT,Traits>::flush

basic_ostream& flush();

Writes uncommitted changes to the underlying output sequence.

If rdbuf() is a null pointer, does nothing.

Otherwise, behaves as an UnformattedOutputFunction (since C++11). After constructing and checking the sentry object, calls rdbuf()->pubsync(). If the call returns -1, calls setstate(badbit).

Parameters

(none).

Return value

*this.

Exceptions

May throw std::ios_base::failure if (exceptions() & badbit) != 0.

Example

#include <thread>
#include <iostream>
#include <chrono>
using namespace std::chrono_literals;
 
void f()
{
    std::cout << "Output from thread... ";
    for (int i{1}; i != 10; ++i) {
        std::this_thread::sleep_for(250ms);
        std::cout << i << ' ';
        // output three numbers at once;
        // the effect is observable only in real-time
        if (0 == (i % 3)) {
            std::cout.flush();
        }
    }
    std::cout << std::endl; // flushes as well
}
 
int main()
{
    std::thread tr{f};
    std::this_thread::sleep_for(150ms);
    std::clog << "Output from main\n";
    tr.join();
}

Output:

Output from main
Output from thread... 1 2 3 4 5 6 7 8 9

See also

invokes sync()
(public member function of std::basic_streambuf<CharT,Traits>)
[virtual]
synchronizes the buffers with the associated character sequence
(virtual protected member function of std::basic_streambuf<CharT,Traits>)
flushes the output stream
(function template)
outputs '\n' and flushes the output stream
(function template)
synchronizes with the underlying storage device
(public member function of std::basic_istream<CharT,Traits>)

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