从VisualC++.NET2003开始,移除了旧的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、fstreamifstream和ofstream的attach成员函数
filebuf、fstreamifstream和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
|