C++primer读书笔记——第8章 IO库

c++标准库的基本介绍

核心库设施是每个c++程序员都应该熟练掌握的。
标准库的核心是很多容器类和一族泛型算法。
算法库为各种经典算法提供了高效的实现。
智能指针是新标准库中最重要的类之一。

IO库的基本介绍

c++不直接处理输入输出,而是通过一族定义在标准库中的类型来处理IO。
这些类型支持从设备读取数据、向设备写入数据的IO操作,设备可以是文件、控制台窗口,还有一些类型允许内存IO,即从string读取数据,向string写入数据。
istream 输入流类型 提供输入操作
ostream 输出流类型 提供输出操作
cin,istream 对象,从标准输入读取数据
cout,ostream对象,向标准输出写入数据
cerr,ostream对象,向标准错误写入数据,输出程序错误消息
“>>”,从一个istream对象读取输入数据
“<<”,向一个ostream对象写入输出数据
getline函数,从一个给定的istream读取一行数据,存入一个给定的string对象中。

8.1 IO类

我们已经使用过的IO类型和对象都是操作char数据的。
默认情况下,IO对象都是关联到用户的控制台窗口的。在实际应用中,无法限制程序仅从控制台窗口进行IO操作,程序常常需要读写命名文件,而且使用IO操作处理string中的字符会很方便。
为了支持不同种类的IO处理操作(控制台、命名文件、string),标准库定义了不同的IO类型

头文件 类型
iostream istream,wistream 从流读取数据;ostream,wostream 向流写入数据;iostream,wiostream读写文件
fstream ifstream,wifstream 从文件读取数据;ofstream,wofstream 向文件写入数据;fstream,wfstream 读写文件
sstream istringstream,wistringstream 从string读取数据;ostringstream, wostringstream 向string写入数据;stringstream,wstringstream 读写string

总结:iostream定义了用于读写流的基本类型;
fstream定义了读写命名文件的基本类型;
sstream定义了读写内存string对象的类型。

为了支持使用宽字符的语言,标准库定义了一组类型和对象来操纵wchar_t类型的数据,宽字符版本的类型和函数的名字以一个w开始。宽字符版本的类型和对象与其对应的普通char版本的类型定义在一个同一个头文件中。

设备类型(控制台窗口、命名文件、string)和字符大小(是否是宽字符)都不会影响我们要执行的IO操作。例如:我们可以用>>读取数据,不用管是从控制台窗口、磁盘文件还是一个string获取,也不用管读取的字符能存入一个char对象内,还是需要一个wchar_t对象来存储。
补充:设备类型和字符大小会影响我们选择的IO类的类型。

IO类之间的继承关系:
ifstream和istringstream继承自istream。istring对象如何使用,就如何使用ifstream和istringstream。
ofstream和ostringstream继承自ostream
补充:基类是如何使用的,派生类就如何使用。

8.1.1 IO对象无拷贝或赋值

由于不能拷贝IO对象,不能将其作为形参或者返回类型,通常以引用的形式传递和返回流。读写一个IO对象会改变其状态,因此其传递和返回的引用不能是const的。

8.1.2 条件状态

IO错误的例子:

int ival;
cin>>ival;

如果在输入Boo,读操作会失败。代码中的输入运算符期待读取一个int,却得到了一个char,cin会进入错误状态。
一个流一旦发生错误,其上后续的IO操作都会失败。
只有当一个流处于无错状态,才可以从它读取数据,向它写入数据。由于流可能处于错误状态,因此代码通常应该在使用一个流之前检查它是否处于良好状态。

while (cin>>word)
  //OK:读操作成功

while循环检查>>表达式返回的流的状态。

当流作为条件使用,只能告诉我们流是否有效,无法告诉我们具体发生了什么。
IO库定义了一个与机器无关的iostate类型,提供了一个表达流状态的完整功能,这个类型作为一个位集合来使用。
badbit表示系统级错误,如不可恢复的读写错误。通常情况下,一旦badbit被置位,流就无法再使用。
在发生可恢复错误后,failbit被置位,如期望读取数组却

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值