IO标准库:输出缓冲区


导致缓冲区被刷新的几种方式:

1. 程序正常结束。作为 main 返回工作的一部分,将清空所有输出缓冲区。

2. 在一些不确定的时候,缓冲区可能已经满了,在这种情况下,缓冲区将会在写下一个值之前刷新。

3. 用操纵符显式地刷新缓冲区,例如行结束符 endl。

4. 在每次输出操作执行完后,用 unitbuf 操作符设置流的内部状态,从而清空缓冲区。

5. 可将输出流与输入流关联(tie)起来。在这种情况下,在读输入流时将刷新其关联的输出缓冲区。


使用操作符显示刷新输出流缓冲区的四种方式:

void test_flush_buf()
{
	std::cout << "abc_";
	std::cout << "def_";
	std::cout << "ghi_";
	
	// 1.操作符flush,但不在输出中添加任何字符
	std::cout << std::flush;

	// 2.操作符endl,输出一个换行符并刷新缓冲区
	std::cout << std::endl;

	// 3.ends操作符,在缓冲区中插入空字符 null,然后后刷新【较少用】
	std::cout << std::ends;
	
}

// 使用unitbuf操作符清空缓冲区:
void test_unitbuf()
{
	// nounitbuf 操纵符将流恢复为使用正常的、由系统管理的缓冲区刷新方式
	std::cout << std::unitbuf << "first_" << "second_" << "third" << std::nounitbuf;
	// 相当于:
	std::cout << "first_" << "second_" << "third" << std::flush;
}

另外:如果程序崩溃了,则不会刷新缓冲区。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值