std::unitbuf, std::nounitbuf
来自 cppreference.com
定义在头文件 <ios> 中 |
||
std::ios_base& unitbuf( std::ios_base& str ); |
(1) | |
std::ios_base& nounitbuf( std::ios_base& str ); |
(2) | |
启用或禁用在任何输出操作后自动刷新输出流。对输入没有影响。
这是一个 I/O 操作符,它可以用像 out << std::unitbuf 这样的表达式调用,对于任何类型为 std::basic_ostream 的 out
,或者用像 in >> std::unitbuf 这样的表达式调用,对于任何类型为 std::basic_istream 的 in
。
内容 |
[编辑] 备注
刷新在 std::basic_ostream::sentry 对象的析构函数中执行,如果 str.flags() & std::ios_base::unitbuf 为 true,则它会调用 str.rdbuf()->pubsync()。
标准输出对象 std::cerr 和 std::wcerr 默认情况下它们的 unitbuf
位被设置。
[编辑] 参数
str | - | 对 I/O 流的引用 |
[编辑] 返回值
str(操作后的流的引用)。
[编辑] 示例
如果没有 std::unitbuf
或其他显式刷新,输出是一样的,但不会实时显示。
运行这段代码
#include <chrono> #include <iostream> template<typename Diff> void log_progress(Diff d) { std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d) << " ... "; } int main() { volatile int sink = 0; std::cout << std::unitbuf; // enable automatic flushing const auto start = 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 log_progress(std::chrono::high_resolution_clock::now() - start); } std::cout << '\n'; }
输出
571ms ... 1146ms ... 1722ms ... 2294ms ... 2865ms ...
[编辑] 另请参见
刷新输出流 (函数模板) | |
输出 '\n' 并刷新输出流 (函数模板) |