std::unitbuf, std::nounitbuf
来自 cppreference.cn
定义于头文件 <ios> |
||
std::ios_base& unitbuf( std::ios_base& str ); |
(1) | |
std::ios_base& nounitbuf( std::ios_base& str ); |
(2) | |
在任何输出操作后启用或禁用输出流的自动刷新。对输入没有影响。
这是一个 I/O 操纵器,对于任何类型为 std::basic_ostream 的 out
,可以通过表达式 out << std::unitbuf 来调用;对于任何类型为 std::basic_istream 的 in
,可以通过表达式 in >> std::unitbuf 来调用。
目录 |
[编辑] 注意
刷新是在 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' 并刷新输出流 (函数模板) |