链接:http://tech.quarkjoker.com/2011/06/22/C++%E7%9A%84tie()%E5%87%BD%E6%95%B0

今天看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.

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

C++的tie()函数相关推荐

  1. 窥视C++细节-使用tie函数解包pair对象的原理

    文章目录 示例 std::tie函数 std::ignore std::pair和std::tuple互转 解包pair返回值 示例 这是http://www.cplusplus.com/refere ...

  2. 从一个小题中的应用来体会下std::tie的便利之处

    文章目录 前言 解题过程 爬楼梯的最少成本 题目分析 DP优化 利用tie进行写法优化 std::tuple std::tuple的访问 std::tie函数中使用std::ignore占位 总结 前 ...

  3. std::tuple, std::pair, std::tie 快速掌握

    tuple是可以存异构元素的容器,比如可以在一个容器中同时存储int.string.bool等. 作为对比,vector只能存储同类型的元素.tuple可做作为struct的一种更简洁高效的替代. 使 ...

  4. boost::tie或std::tie是啥

    简介   学boost库的时候,遇到一段代码,函数返回类型是boost::tribool 类型.代码里用了boost::tie函数,有点蒙蔽了.查资料总结如下,std也有对应的实现. 基本概念先弄清, ...

  5. [C++]C++中的IO类

    C++中的IO类 C++语言不直接处理输入输出,而是通过一组定义在标准库中的类型来处理IO.这些类型支持从设备读取数据,向设备写入数据的IO操作,设备可以是文件,控制台窗口等.还有一些类型允许内存IO ...

  6. C++为什么空格无法输出_算法竞赛C++常用技巧——输入输出优化(防止TLE)

    cin.cout优化 在默认情况下,std::cin/std::cout 是极为迟缓的输入/输出方式,而 scanf/printf 比 std::cin/std::cout 快得多. 可是为什么会这样 ...

  7. boost源码剖析之:Tuple Types(rev#2)

    boost源码剖析之:Tuple Types(rev#2)   刘未鹏(pongba) C++的罗浮宫(http://blog.csdn.net/pongba)   Note: 并非新作,04年曾放在 ...

  8. c++ 输入输出流关联

    #include <iostream> #include <string> #include <fstream> #include <sstream> ...

  9. C++ Primer 第八章 标准IO库

    学习本章内容之前有必要对缓冲区的概念做一个基本了解,我引用了网上一片文章<C++编程对缓冲区的理解>,内容如下: 什么是缓冲区    缓冲区又称为缓存,它是内存空间的一部分.也就是说,在内 ...

最新文章

  1. SocketIO-nio
  2. Dom4j 学习笔记
  3. 贪心应用--汽车加油次数问题
  4. 【C语言】第九章 复杂数据类型与结构体 题解
  5. mysql数据库 day01
  6. 面试官最爱的 volatile 关键字,这些问题你都搞懂了没?
  7. php wmi,wmi与vbs
  8. shell字符串长度
  9. 网站的基本功能:RBAC
  10. 进程管理 systemctl控制
  11. cesium 加载科技感
  12. OCR图文识别工具Mac版:iText
  13. 阶段3 1.Mybatis_04.自定义Mybatis框架基于注解开发_2 回顾自定义mybatis的流程分析...
  14. Java课程设计——日历的设计与实现
  15. 动态RAM和静态RAM的区别(浅学)
  16. Java获取指定时间前一小时、后一小时的时间
  17. 判断魔方阵c语言程序设计_魔方阵原理及十种解法(C语言)
  18. 第五届蓝桥杯——java c组 1/a 的分数称为单位分数
  19. 文件上传漏洞原理和利用
  20. 功能齐全的 ESP32 智能手表,具有多个表盘、心率传感器硬件设计

热门文章

  1. DFRobot新品Fermion:MCP9808高精度数字温度传感器的简介和工作原理介绍
  2. 归一化谱聚类NCUT(matlab实现)
  3. 新魔百盒UNT413-905L3B-当贝桌面完美线刷包-各项正常
  4. 人生是一场独自的修行
  5. Luogu P3853 路标设置
  6. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)
  7. Mybatis类型转换器使用
  8. 【Java / Kotlin】Warning:Leaking ‘this‘ in constructor of non-final class
  9. Linux标识第2个扩展分区,精益创业模式与Get Big Fast模式、火箭发射思维模式,对创业假定的不同在于它认为( )。...
  10. easy_x是实现钟表