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(){volatileint sink =0;std::cout<< std::unitbuf;// 启用自动冲入 constauto 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;// 做一些工作 log_progress(std::chrono::high_resolution_clock::now()- start);}std::cout<<'\n';}
输出:
571ms ... 1146ms ... 1722ms ... 2294ms ... 2865ms ...
[编辑]参阅
冲洗输出流 (函数模板) | |
输出 '\n' 并冲洗输出流 (函数模板) |