在线文档教程
C++
输入/输出 | Input/output

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::cerrstd::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)..

二次

另见

flushflushes the output stream (function template)
endloutputs '\n' and flushes the output stream (function template)

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/io/manip/unitbuf