C++ primer 第八章

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


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值