C++的输出缓冲区2-2

1 自动关联输入流cin与输出流cout

通常情况下,当从输入流cin中读取数据之前,都会使用输出流cout显示一个提示信息,

int i;
cout << "请输入一个整数:";
cin >> i;

在输入整数之前,在控制台中会显示提示信息。在“C++的缓冲区2-1”中提到,输出流cout是与缓冲区关联的,也就是说提示信息“请输入一个整数:”先被保存到与cout关联的缓冲区中,然后在被输出。因此,我们必须保证从输入流cin中读取数据之前就要能够输出流cout缓冲区中的数据被显示。C++标准库将输入流cin与输出流cout关联在一起,这样任何试图从输入流cin中读取数据的操作都会先刷新与其关联的输出流cout,就保证了在读取输入数据之前会显示提示信息。

2手动关联

在“1 自动关联输入流cin与输出流cout”中提到,C++标准库将cin与cout关联在一起,可以看做是自动关联。而通过basic_ios::tie()函数可以实现关联查询以及手动关联。

2.1 关联查询

不带参数的tie()函数可以实现查询与其关联的流。

ostream* pos = cin.tie();
if (pos == &cout)
{
  cout << "cin的关联流是cout";
}

其中,通过tie()函数查询与输入流cin关联的流,此时pos的值就是输出流cout的地址。

2.2 手动关联

可以通过tie()函数实现流的手动关联,其中tie()函数的参数即为要关联的流指针,此时tie()函数的返回值是之前与之关联的流。

ostream* pos = cin.tie(&cerr);
if (pos == &cout)
{
  cout << "cin之前关联的流是cout,现在变成cerr了";
}

其中,通过tie()函数将cin与cerr关联,此时pos的值是之前关联的cout的指针。

2.3 解除关联

将tie()函数的参数设置为nullptr,实现解除关联,返回值是之前关联的流指针。

ostream* pos = cin.tie(&nullptr);

此时输入流cin解除了和其它流的关联,pos是之前与之关联的输出流cout的指针。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值