std::unitbuf
Defined in header <ios>  |   |   | 
|---|---|---|
std::ios_base& unitbuf( std::ios_base& str );  | (1)  |   | 
std::ios_base& nounitbuf( std::ios_base& str );  | (2)  |   | 
在任何输出操作之后,启用或禁用输出流的自动刷新。对输入没有影响。
1%29启用unitbuf溪流中的旗子str好像通过打电话str.setf(std::ios_base::unitbuf)...
2%29禁用unitbuf溪流中的旗子str好像通过打电话str.unsetf(std::ios_base::unitbuf)...
这是一个I/O操作程序,可以用表达式调用它,如out << std::unitbuf对任何out类型std::basic_ostream或使用表达式,如in >> std::unitbuf对任何in类型std::basic_istream...
注记
的析构函数中执行刷新。std::basic_ostream::sentry对象,它调用str.rdbuf()->pubsync()如果str.flags()&std::ios_base::unitbuf==true...
标准输出对象std::cerr和std::wcerr有他们的unitbuf默认设置的位。
参数
str  | -  | reference to I/O stream  | 
|---|
返回值
str%28操作后对流的引用%29。
例
如果没有std::unitbuf或其他显式的刷新,输出是相同的,但不会实时出现。
二次
#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)..二次
另见
flush  | flushes the output stream (function template)  | 
|---|---|
endl  | outputs '\n' and flushes the output stream (function template)  | 
 © cppreference.com在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

