從 Visual C++ .NET 2003 開始,移除了舊的 iostream 庫。
標準 C++ 庫和以前的運行時庫之間的主要差異在於 iostream 庫。iostream 實現的具體細節已經更改,如果想鏈接標準 C++ 庫,可能有必要重寫代碼中使用 iostream 的部分。
必須移除任何包含在代碼中的舊 iostream 頭文件(fstream.h、iomanip.h、ios.h、iostream.h、istream.h、ostream.h、streamb.h 和 strstrea.h),並添加一個或多個新的標準 C++ iostream 頭文件(<fstream>、<iomanip>、<ios>、<iosfwd>、<iostream>、<istream>、<ostream>、<sstream>、<streambuf> 和 <strstream>,所有頭文件都沒有 .h 擴展名)。
下表描述新的標準 C++ iostream 庫不同於舊 iostream 庫的行爲。
在新的標準 C++ iostream 庫中:
open 函數不採用第三個參數(保護參數)。 無法從文件句柄創建流。 除了幾個例外,新的標準 C++ 庫中的所有名稱都在 std 命名空間中。有關更多信息,請參見使用 C++ 庫頭。 單獨用 ios::out 標誌無法打開 ofstream 對象。ios::out 標誌必須在邏輯 OR 中和另一個 ios 枚舉數組合;比如,和 ios::in 或 ios::app 組合。 因爲設置了 eofbit 狀態,到達文件尾後 ios::good 不再返回非零值。 除非知道當前沒有設置基標誌,否則 ios::setf(_IFlags) 不應和 ios::dec、ios::oct 或 ios::hex 的標誌值一起使用。格式化的輸入/輸出函數和運算符假定只設置了一個基。改用 ios_base。例如,setf( ios_base::oct, ios_base::basefield ) 清除所有基信息並將基設置成八進制。 ios::unsetf 返回 void 而不是以前的值。 若出現錯誤,istream::get( char& _Rch ) 不分配給 Rch。 istream::get( char* _Pch, int _Ncount, char _Delim ) 有三點不同: 沒讀取任何內容時設置 failbit。 提取的字符後總是存儲一個 eos(與結果無關)。 值爲 -1 時 _Ncount 是一個錯誤。 具有無效參數的 istream::seekg 不設置 failbit。 返回類型 streampos 是具有重載運算符的類。在返回 streampos 值(比如 istream::tellg、ostream::tellp、strstreambuf::seekoff 和 strstreambuf::seekpos)的函數中,應將返回值轉換成所需的類型:streamoff、fpos_t 或 mbstate_t。 strstreambuf::strstreambuf( _Falloc, _Ffree ) 中的第一個函數參數採用 size_t 參數而不是 long。 除了上述改動外,以下作爲舊 iostream 庫元素的函數、常數和枚舉數不是新 iostream 庫的元素:
filebuf、fstream ifstream 和 ofstream 的 attach 成員函數 filebuf、fstream ifstream 和 ofstream 的 fd 成員函數 filebuf::openprot filebuf::setmode ios::bitalloc ios::nocreate ios::noreplace ios::sync_with_stdio streambuf::out_waiting streambuf::setbuf(相同的行爲使用 rdbuf -> pubsetbuf)
http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vccore/html/_core_differences_in_iostream_implementation.asp
|