C++IO对象不可复制或赋值
C++IO对象不可复制或赋值IO类型的3个独立的头文件:iostream定义读写控制窗口的类型,fstream 定义读写已命名文件的类型,(包含fstream类)sstream定义读写存储在内存中的string对象。(包含了stringstream类)IO类型不可复制或赋值因此,IO类型不可存储在vector容器中。(IO是流对象,而流对象是不能复制的,所以不能存储在vec
C++IO对象不可复制或赋值
IO类型的3个独立的头文件:
iostream定义读写控制窗口的类型,
fstream 定义读写已命名文件的类型, (包含fstream类)
sstream定义读写存储在内存中的string对象。(包含了stringstream类)
IO类型不可复制或赋值
因此,IO类型不可存储在vector容器中。(IO是流对象,而流对象是不能复制的,所以不能存储在vector容器中)
ofstream out1,out2;
out2 = out1; //error : cannot assign stream objects
ofstream print(ofstream);
out2 = print(out2); //error:cannot copy stream objects
形参或返回类型也不能为流类型。如果要传递或返回IO对象,则必须传递或返回指向该对象的指针或引用。
ofstream &print(ofstream&); //ok:takes a reference,no copy
while(print(out2)) { … } // ok:pass reference to out2
一般,如果要传递IO对象以便对它进行读写,可用非const引用的方式传递这个流对象。对IO对象的读写会改变它的状态,因此引用必须是非const的。
练习:
1)ostream print(ostream os);
这个声明是错的:首先,IO对象是不能复制的,要传递或返回IO对象时,必须传递或返回指向该对象的指针或引用。
应该改成: ostream &print(ostream& os);
2) 假设os是一个ofstream对象,下面程序做了什么?
os<<”Goodbye”<
#include <fstream>
#include <string>
#include <stdio.h>
using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");
int main()
{
string str = "hi in";
out<<str<<endl;
return 0;
}
首先, out<<———-输出
in>> ———-输入
case 1: os — ofstream
正常输出
case 2: os — ifstream
<< 不对,
也不能写入 endl;
应该改成: string str; os>>str;
case 3: os — ostringstream ———–这个不是针对文件流的,而是通过写入内存,所以不会在默认目录中自动生成一个名字为“output.txt”的文件。
此代码能正常运行,但是看不到有何运行结果。
更多推荐
所有评论(0)