IO类
C++中提供了三个IO相关的头文件:
iostream : 标准输入输出
fstream : 文件输入输出
sstream : 字符串输入输出
标准输入输出主要由两个流对象实现
- istream:处理输入,有衍生类ifstream 、istringstream
- ostream:处理输出,有衍生类ofstream 、ostringstream
因此不管流对象是从控制台、文件或是string中读取,都可以用重载过的运算符<<及>>读取
IO对象无拷贝赋值
流对象无法赋值和拷贝,只能通过引用传递参数,例如下面的语句就会报错,函数已删除
ofstream out1, out2;
out1 = out2;//通过删除拷贝赋值构造函数禁止流对象赋值
ofstream out(out1);//通过删除拷贝构造函数禁止初始化
//不能对流对象赋值、初始化以及拷贝,只能引用传递参数。
条件状态
流对象在出错的时候会将条件状态改变,常见的有 badbit, eofbit 等,通过这些标志位可以控制常见输入输出流中的异常
cin.rdstate();//返回标志位
cin.good();//判断流对象是否正常
cin.clear();//清除所有错误标志位,恢复流对象状态
输出缓冲
cout << endl; //完成换行并且刷新缓存区,ends也会刷新缓存区
cout << flush; //flush副作用地刷新缓存区
cout << unitbuf; //强制每次操作刷新缓存区
输入流读取数据时,关联的输出流也会刷新,比如 cin 和 cout
文件IO
string s1, s2;
s1 = "...";
s2 = "...";//导入文件路径
fstream f1(s1,ifstream::in);//只读
fstream f2(s2,ofstream::out);//只写
//或者说明输入输出对象
ifstream f3(s1);
ofstream f4(s2);
//或者先默认初始化再赋值
ifstream f5;
f5.open(s1);
f5.close(s1);
文件模式
常用的有以下几种
in | 只读 |
out | 只写 |
app | 写操作时定位到末端 |
ate | 打开文件直接定位到文件末端 |
string流
string s1;
stringstream strm;
ostringstream ostrm;
istringstream istrm(s1);//string 绑定到输入流中
istrm >> s1;
ostrm << s1;
cout << ostrm.str() << istrm.str();//返回流中保存的拷贝
ostream 可以用来逐步检验输出是否正确,最后一起打印,还可以将其他类型转换为string