C++ primer 第八章

来源:互联网 发布:linux命令和shell关系 编辑:程序博客网 时间:2024/05/13 19:25

1. 如果函数有基类类型的引用形参,可以给函数传递其派生类型的对象。如,一个函数有istream&形参,可以传递ifstream或者istringstream对象。

 

2. 只有支持复制的元素类型可以存储在vector或者其他容器类型中。流对象不能复制,所以不能。

 

3. 形参或返回类型也不能为流类型,可以传递或返回指向该对象的指针或者引用。

 

4. 除了endl,flush可用于刷新流,但不在输出中添加任何字符;ends也可用于刷新流,在输出中插入空字符null。

如果要刷新所有输出,用unitbuf操作符,在每次执行完写操作后都刷新流。如果要取消unitbuf的效果,试用nounitbuf操作符。

cout<< unitbuf <<"aaa" <<"bbb"<< nounitbuf;


5. 如果程序崩溃,啧不会刷新缓冲区。如果想要通过输出来找到错误,最好在每次输出后刷新缓冲区。

 

6. 由于历史原因,IO标准库使用C风格字符串。

string input_file;ifstream infile(input_file.c_str());


7. 关闭流并不能改变流对象的内部状态。如果最后的读写操作失败了,对象的状态将保持为错误状态,即使使用close()函数也不能恢复状态。所以需要调用clear()函数重新恢复流的状态。

 

8. 打开模式:

app: 每次写之前,找到文件尾。

ate:  打开文件后,定位到文件尾。

trunc: 打开文件时,清空文件内容。

几个组合方法:out | app, in |out等等

 

9. sstream输入和输出操作可自动把算数类型转化为相应的string表示形式,反之也可以。

int num1=100,num2=200,num3,num4;ostringstream oss;oss<<"num1: "<<num1<<"\n"<<"num2: "<< num2<<endl;istringstream iss(oss.str());string temp;iss>>temp>>num3>>temp>>num4;cout<<num3<<"\t"<<num4<<endl; //输出为100   200


 

原创粉丝点击