学习C++ Primer 的个人理解(八)

时间:2021-10-09 20:42:13

结束了第一部分,在最后的第七章,我只简单的总结了一下,因为后面还会更详细的说明有关类的内容。而且说实在的这一张的内容让我很不舒服,验证了本书实际上有许多内容是作者的学生一起拼凑而成的。第七章结构给我感觉非常混乱,不断地“再探”而看不出理由,并没有前置只是需要了解。

第八章是IO库

IO类

  ifstream 和 istringstream 都继承自 istream。 所以我们可以想使用istream一样使用ifstream 和 istringstream。

  

  IO对象无拷贝或赋值

    由于不能拷贝IO对象,所以我们也不能将形参或返回类型设置为流类型。

    进行IO操作的函数通常以引用方式传递或返回流。

    读写一个IO对象会改变其状态,因此传递和返回的引用不能使const的。

  条件状态

    iostate类型,提供了表达流状态的完整功能。

  管理输出缓冲

    导致缓冲刷新的原因有很多:

      1,程序正常结束。

      2,缓冲区满了

      3,使用endl

      4,可以使用unitbuf设置流的内部状态,来清空缓冲区。对cerr的设置是unitbuf的。

      5,输出流被关联至另一个流。

  刷新输出缓冲区

    endl : 加一个换行符,并且刷新缓冲区

    flush: 不加换行符,刷新缓冲区,不附加任何额外字符

    ends: 加一个空字符,并且刷新缓冲区

  unitbuf    

    如果想在每次输出操作后都刷新缓冲区,我们可以使用unitbuf操作符。他告诉流接下来的每一次操作都进行一次flush。而nounitbuf操作符则重置流。

    cout << unitbuf;  所有输出操作后都会立即刷新缓冲区

    cout << nounitbuf; 回到正常的缓冲方式

文件输入输出

  ifstream 从一个给定文件读取数据:

  ofstream 向一个给定文件写入数据

  fstream 读写指定文件

  

string流

  sstream头文件定义了三个类型来支持。

  istringstream 从 string 读取数据,ostringstream 向 string 写入数据, stringstream 可读写string。