c++IO的tie
2019-08-23 本文已影响0人
逆若流溪
参考c++中文版282页"刷新输出缓冲区"和"关联输入和输出流"
tie函数是流对象的成员函数,有两个重载版本
1,ostream* tie ( ostream* tiestr );
将tiestr指向的输出流绑定的该对象上,并返回上一个绑定的输出流指针。
2,ostream* tie ( ) const;
如果该对象没有绑定输出流,则返回空指针;
如果该对象通过第一种重载版本绑定了输出流,则返回绑定的该输出流;
案例:转载自https://blog.csdn.net/qq100440110/article/details/51056306
#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;
}
如果按照完整的代码,会发现每次按下回车键之后都会将本次输入的内容打印到test.txt文件中,而如果去掉作者标注的那行代码之后,会发现只有程序运行正常结束时才会将本次输入的内容全部一次性写到test.txt文件中.
主要原因在于绑定之后每次的读取数据的操作都会刷新相关联的输出流,因此可以实现实时输出.
cin与cout是默认绑定的,,因此,如果注释掉下边这行代码
cin.tie (&ofs); //注释掉这一行试试看
则更下边这行代码中
*cin.tie() << "There will be some text:";
*cin.tie()返回的是标准的cout,因此会直接在屏幕上打印出"There will be some text:",而将输入文本打印在文件test.txt中
同样的原理也可以解释为什么正常情况下,cout总是可以实时输出cin的内容,而不用等到程序结束