std::unitbuf
STD::unitbuf,std::nounitbuf
Defined in header | | |
---|---|---|
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。