这里并不是讲解C++IO的使用方法,只是关于自己对C++IO库的一点理解,也就是用我自己的解释说明C++IO库到底是什么东西?
首先,C++语言并不是直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO,这些类型只在3个头文件中定义,即:<iostream>、<fstream>、<sstream>这是三个头文件,它们分别定义了标准输入输出类型、文件输入输出类型、内存输入输出类型,详细如下:
<iostream>头文件定义:
(从设备读)
(从设备写)
(3)iostream,可读可写。
<fstream>头文件定义:
(从文件读)
(向文件写)
(3)fstream,可读可写。
<sstream>头文件定义:
(从内存读)
(向内存写)
(3)stringstream,可读可写。
其次,C++IO库其实只处理两种类型输入输出,第一种是设备/文件IO,第二种是内存IO,其中第一种分别对应<iostream>、<fstream>这两个头文件,第二种对应<sstream>头文件,可以对应查看上面关于三种头文件的解释。(为什么三个头文件只分成两类,因为对于内存来说,设备和文件是一样的,都可以理解为外部设备,其实在计算机系统领域,所有的设备都是文件)
接着,C++IO类型怎么使用?既然它们都是C++IO类型,而C++只是一种语言标准,那它没必要分别对待这三种IO类型,所以对于这三种IO类型,你只要会使用其中的一种类型进行IO输出,那另外两种就自然会了,但前提是你要理解每一种IO类型的原理。
最后,说说到底怎么使用C++IO类型。首先,不用介绍,你肯定使用过cin和cout这个两个东西,那这两个东西到底是什么呢?首先它们肯定是一个名字,其次它们是一个对象(可想而知,C++就是面向对象的),再者我们一般是这样使用它们,std::cin,这是因为他们是定义在标准库名字空间std下的一个标准输入输出类型的对象,即他们分别是istream和ostream类型的对象。弄清楚了cin和cout的本质,现在就看看使用它们时有什么效果,最直接的就是在使用cout打印一个变量时,如cout << a;,我们就可以在控制台上看到变量a的值,这个说明了什么呢?首先,cout的意思是标准输出流,注意是它是一个“流”,要理解这个词,最简单的理解可以把他当做一个管道(或者可以理解成为一个无限大的数组),管道里面装的就是你要输出的内容,然后再来看cout << a;的形式,<<箭头方向向左,就可以理解为把变量a的内容移动到输出流cout中,然后在控制台中显示出来,同理,cin >> b;就是从通过cin把从标准输入(如键盘)输入的内容移动到变量b中。总之,要弄清楚C++IO类型的使用本质,需要理解两个方面:(1)理解“流”的意思,即把所有的IO类型的对象都当做一个对应的流管道;(2)理解 “箭头”,即“<<”和">>"的方向,分别表示向流写或从流读。
示例:
如果outlog是一个文件输出流对象,outstring时一个string流输出对象,即分别定义为
ofstream outlog("filename");
ostringstream outstring(str);
这种定义形式都可以理解为将一个文件、string流对象绑定到一个对应的文件、string对象,绑定之后,就能通过流对象对文件或者内存进行读写,那么就可以像标准输出流对象cout一样使用outlog和outstring,如outlog << yourname; 表示向文件写入你的名字,outstring << "helloword"表示向一个string输出流写入“helloword”。
总之,对于三种IO流对象,都需要把流当做一个中间缓存,即作为变量与文件、标准输入输出外设、内存string之间的,要体会这三者之间的数据流向,比如cin对象,其数据流向为从键盘到cin(中间缓存)再到变量,对于ofstream对象,数据流向为变量到中间缓存再到文件,对于istringstream对象,其数据流向为string字符串常量到中间缓存再到string变量。
另外,所有三种输入流(即从其他部分读取数据的流)cin、ifstream、istringstream默认都是遇到空格终止读取数据。
当然,这里只是解释C++IO库类型的,关于它们的一些具体用法需要更深入的去了解。