C++基础回顾2

IO库

istream(输入流)类型,提供输入操作;
ostream(输出流)类型,提供输出操作;
cin:一个istream对象,从标准输入读取数据;
cout:一个ostream对象,从标准输出读取数据;
cerr:一个ostream对象,通常用于输出程序错误消息,写入到标准错误;
“>>”:运算符,用来从一个istream对象读取数据;
“<<”:运算符,用来从一个ostream对象读取数据;
getline函数,从一个给定的istream对象中读取一行数据,存入一个给定的string对象中。

C++使用标准库类来处理面向流的输入输出

  • iostream处理控制台IO
  • fstream处理命令文件IO
  • stringstream完成内存string的IO
    类fstream和stringstream都继承自iostream,输入类都继承自istream,输出类都继承自ostream;可以在istream对象执行的操作也可以在ifstream或者istringstream对象上执行。继承自ostream输出类同理。

IO对象无拷贝或赋值

 ofstream out1, out2;
 out1 = out2; //错误:不能对流对象赋值
 ofstream print(ofstream);//错误:不能初始化ofstream参数
 out2 = print(out2); //错误:不能拷贝流对象

由于不能拷贝 IO对象,因此我们也不能将形参或返回类型设置为流类型,进行IO操作的函数通常以 引用方式传递和返回流,读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。

条件状态

IO库条件状态
strm:iostate:strm是一种IO类型;
strm:badbit:用来指出流已崩溃;
strm:failbit:用来指出IO操作失败;
strm:eofbit:用来指出文件已结束;
strm:goodbit:用来指出流未处于错误状态;
s.eof():若流s的eofbit置位,则返回true;
s.fail():若流的failbit或badbit置位,则返回true;
s.bad():若流的badbit置位,则返回true;
s.good():若s处于有效状态,则返回true;
s.clear():将流s中所有的条件状态状态位复位,将流的状态设置为有效,返回void;
s.clear(flags):根据给定的flags标志位,将流s中对应条件状态位复位。
s.setstate(flags):根据给定的flags标志位,将流s中对应条件状态位置位。
s.rdstate():返回流s的当前条件状态。

刷新输出缓冲区

cout << "hi" << endl; //输出hi和一个换行,然后刷新缓冲区
cout << "hi" << flush; //输出hi,然后刷新缓冲区,不附加任何额外的字符
cout << "hi" << ends; //输出hi和一个空字符,然后刷新缓冲区

警告:如果程序崩溃,输出缓冲区不会被刷新
这点在根据日志查看BUg时深有体会,有时程序崩溃了,但是它所输出的数据可能停留在输出缓冲区中等待打印。

文件模式

每个流都关联一个文件模式,用来指出如何使用文件。
in:以读的方式打开
out:以写的方式打开
app:每次写操作前均定位到文件末尾
ate:打开文件后立即定位到文件末尾
trunc:截断文件
binary:以二进制方式进行IO

猜你喜欢

转载自blog.csdn.net/ty13438189519/article/details/80241940
今日推荐