C++中关于“流”存在两个版本,一个是老的版本(非标准化的版本),一个是新的版本(属于C++标准库中的一部分)。目前这两个版本在VC6.0中均被支持,强烈建议使用标准化的版本。下面是新旧版本的类结构图。
old version
new version
新旧版本的区别:
(1)使用不同的头文件
old version 头文件如:#include <fstream.h>
new version 头文件如:#inlcude <fstream>
新旧版本类定义所在的头文件,如下:
/* old vision */
class ios --- <ios.h>
class istream --- <istream.h>
class ostream --- <ostream.h>
class ifstream --- <fstream.h>
class ofstream --- <fstream.h>
class iostream --- <iostream.h>
class fstream --- <fstream.h>
class streambuf --- <streamb.h>
class filebuf --- <fstream.h>
cin cout cerr clog --- <iostream.h>
/* new vision */
class ios_base --- <ios>
class basic_ios --- <ios>
class basic_istream --- <istream>
class basic_ostream --- <ostream>
class basic_iostream --- <istream>
class basic_istringstream --- <sstream> // 用来从字符序列中读取数据
class basic_ostringstream --- <sstream> // 用来将数据写入字符序列
class basic_stringstream --- <sstream> // 用来对字符序列进行读写操作
class basic_ifstream --- <fstream> // 读文件流
class basic_ofstream --- <fstream> // 写文件流
class basic_fstream --- <fstream> // 读写文件流
class basic_streambuf --- <streambuf> // 流缓冲区
class basic_stringbuf --- <sstream> // 字符序列缓冲区
class basic_filebuf --- <fstream> // 文件流缓冲区
cin cout cerr clog --- <iostream>
wcin wcout wcerr wclog --- <iostream>
ios istream ostream iostream istringstream ostringstream stringstream
ifstream ofstream fstream streambuf stringbuf filebuf --- <iosfwd>
wios wistream wostream wiostream wistringstream wostringstream wstringstream
wifstream wofstream wfstream wstreambuf wstringbuf wfilebuf --- <iosfwd>
(2)是否使用命名空间
old version 暴露在全局范围之下,不包含在任何命名空间中。
new version 包含在std命名空间之中。 //【using namespace std;】
(3)新版本不但包含“文件流”,还包含“字符窜流”(旧版本可能也包含“字符窜流”,但在VC6已经不再支持旧版本的“字符窜流”了。)。
(4)新版本被国际化了,支持宽字符。
(5)新版本使用泛型实现。