C++的tie()函数

转载 2017年01月02日 21:05:17

今天看C ++ primer 时,看到了ios::tie() 函数。不明白其含义,跟不知道作用。于是上网查了一下。

cplusplus.com 给出的定义是:

ostream* tie ( ) const; //返回指向绑定的输出流的指针。
ostream* tie ( ostream* tiestr ); //将tiestr指向的输出流绑定到该对象上,并返回一个绑定的输出流指针。
什么意思呢?

就是说对于一个ios(输入输出流)对象,可以把一个输出流和它“绑定”起来。不带参数执行,返回“绑定”的输出流指针;带一个输出流指针作为参数,则重新设置绑定的对象,并返回前任绑定对象(指针)。

但是,什么是“绑定”呢?

比方说,对于下面这个程序:
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream ofs;
  ofs.open ("test.txt");

  cin.tie (&ofs); //注释掉这一行试试看
  *cin.tie() << "There will be some text:";
  char c;
  while(cin >> c){
    ofs << c;
  }

  ofs.close();

  return 0;
}

用linux下watch命令(windows下还不知道有没有什么类似的东西,如果没有就用本办法:手动关掉再打开)实时察看test.txt文件,会发现每当你在终端里敲几个字后按下回车,test.txt文件里的文字就多了几个。
而如果你将代码中标注的那一行注释掉,就会发现,test.txt只有在程序运行结束(linux下按ctrl+d,windows下是ctrl+z结束输入)后才会有东西出现。
这就是“绑定”的效果,每当被“绑定”的对象有出入或输出操作,就会自动刷新“绑定”的对象的缓冲区,以达到实时的效果。

 

Remarks

tie causes two streams to be synchronized, such that, operations on one stream occur after operations on the other stream are complete.

Example

In this example, by tying cin to cout, it is guaranteed that the "Enter a number:" string will go to the console before the number itself is extracted from cin. This eliminates the possibility that the "Enter a number:" string is still sitting in the buffer when the number is read, so that we are certain that the user actually has some prompt to respond to. By default, cin and cout are tied.

#include <ios>
#include <iostream>

int main( ) 
{
   using namespace std;
   int i;
   cin.tie( &cout );
   cout << "Enter a number:";
   cin >> i;
}

C++的tie()函数

链接:http://tech.quarkjoker.com/2011/06/22/C++%E7%9A%84tie()%E5%87%BD%E6%95%B0 今天看C ++ primer 时,看到了io...

C++在IO方面效率低下的鬼话别信了 cin.tie与sync_with_stdio加速输入输出

我是怎么在不知道这一对函数的情况下活到今天的,以前碰到cin TLE的时候总是傻乎乎地改成scanf,甚至还相信过C++在IO方面效率低下的鬼话,殊不知这只是C++为了兼容C而采取的保守措施。 ti...

iostream/fstream中的输入输出流指针的绑定,tie函数的使用。

为了兼容c语言的输入输出,c++里面采用tie将输入输出流经行绑定,所以cin/cout并不是独立的。当执行cin时,cout同时会被执行。反之亦然。 by defalut,cin is tied t...

基于二进制程序的类型推导--TIE: Principled Reverse Engineering of Types in Binary Programs

软件工程中的逆向工程(reverse engineering)就是根据已经存在应用程序,反向推出软件设计时的数据和理念的过程,其最终目的是使软件得以维护。 高级编程语言都含有像结构和类这样的数据抽象,...

Angular vs. React - the tie breaker

原文 https://www.airpair.com/angularjs/posts/angular-vs-react-the-tie-breaker 1. Introducti...
  • offbye
  • offbye
  • 2015年07月10日 09:19
  • 1024

cin.tie与sync_with_stdio加速输入输出

我是怎么在不知道这一对函数的情况下活到今天的,以前碰到cin TLE的时候总是傻乎乎地改成scanf,甚至还相信过C++在IO方面效率低下的鬼话,殊不知这只是C++为了兼容C而采取的保守措施。 ti...

boost::tie()和boost::variant()讲解

http://blog.csdn.net/shudaqi2010/article/details/24942193 boost::tie()和boost::variant()讲解 ...

Tie-lxHash-1.22

  • 2014年02月19日 11:11
  • 8KB
  • 下载

C、C++库函数介绍

  • 2017年12月07日 14:55
  • 116KB
  • 下载

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现

C++中的虚函数(表)实现机制以及用C语言对其进行的模拟实现 目录 [显示] 前言 大家都应该知道C++的精髓是虚函数吧? 虚函数带来的好处就是: 可以定义一个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++的tie()函数
举报原因:
原因补充:

(最多只允许输入30个字)