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)新版本使用泛型實現。