iostream 实现中的差异

原创 2004年12月29日 14:56:00
从 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

iostream 实现中的差异

从 Visual C++ .NET 2003 开始,移除了旧的 iostream 库。 标准 C++ 库和以前的运行时库之间的主要差异在于 iostream 库。iostream 实现的具体细节已经更...
  • sssxueren
  • sssxueren
  • 2004年12月29日 14:56
  • 2051

iostream的格式状态

   想要在cout的时候输出16进制的数字而不是默认的10进制,就在输出数字之前使用语句:cout...
  • smuggler_2003
  • smuggler_2003
  • 2006年08月22日 08:25
  • 712

C++的iostream标准库介绍+使用详解(转)

0 为什么需要iostream 我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的 stdio库不同,它从一开始就是...
  • dgyanyong
  • dgyanyong
  • 2015年06月16日 14:02
  • 4659

C++中头文件<iostream>介绍

C++中头文件介绍
  • fengbingchun
  • fengbingchun
  • 2017年03月19日 16:13
  • 1808

iostream 与iostream.h区别(转)

C++的标准类库被修订了两次,有两个标准 C92和C99,这两个库现在都在并行使用,用 .h 包含的是c92 ,不带 .h 的是c99的头文件,对于普通用户来说这两者没有什么区别,区别是在内部函数的具...
  • hairetz
  • hairetz
  • 2009年05月14日 18:06
  • 8713

IOstream 标准库

C++ 的输入/输出(input/output)由标准库提供。 标准库定义了一族类型,支持对文件和控制窗口等设备的读写(IO)。 还定义了其他一些类型,使 string对象能够像文件一样操作,从而...
  • daguge1
  • daguge1
  • 2015年05月14日 12:31
  • 149

c++ stl iostream 使用笔记一

        我们从一开始就一直在利用C++的输入输出在做着各种练习,输入输出是由iostream库提供的,所以讨论此标准库是有必要的,它与C语言的stdio库不同,它从一开始就是用多重继承与虚拟继...
  • winki7
  • winki7
  • 2005年12月16日 16:52
  • 2134

iostream,iostream.h差异

1. 不加.h的是现在C++中规定的标准,目的在于使C++代码用于移植和混合嵌入时不受扩展名.h的限制, 避免因为.h而造成的额外的处理和修改而加.h的是c语言的用法,但是在c++中也支持这种用法...
  • bo_fengyu
  • bo_fengyu
  • 2014年07月17日 14:25
  • 321

为IOStream平反

为IOStream平反​ 很多Native的程序员钟情于printf / fprintf / …, 谈到C++的IOStream Library,大部分的意见都是:复杂、难用、不直接。其实,S...
  • business122
  • business122
  • 2017年07月06日 15:56
  • 152

C++ iostream标准库

iostream分为输入输出流,即istream和ostream,其针对控制窗口的输入输出;常见的输入输出函数有cin cout cerror; fstream主要是来解决文件操作流,也是iostre...
  • qq285016127
  • qq285016127
  • 2015年07月09日 11:49
  • 810
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iostream 实现中的差异
举报原因:
原因补充:

(最多只允许输入30个字)