关于iostream的不合理之处

JohnFractal 2003-10-17 01:31:30
最近写程序经常用到stream,发现它,实在是标准库中最复杂的一部分
除了输入输出外,居然连文本格式化都包括进来。我本来是想以二进制的方式读写一个文件,但它仍然会把非char的类型转换成为文本输出,如:

int a[LEN];
fill( a, a+LEN, 0 );
copy( a, a+LEN, ostream_iterator<int>(os) );

结果打开文件一看,里面全是'0'而不是'\0'

有时候我就想,为什么iostream就不会做成只负责二进制的读写,strstream来负责文本的读写,然后弄一个strstream_adapter来把一个文本流输出到二进制的流上门去呢?
相比起来,STL的设计就不会把你不想要的功能强加给你

难道仅仅是“历史原因”?

希望大家讨论讨论
...全文
61 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cxjddd 2003-10-18
  • 打赏
  • 举报
回复
iostream 有其历史原因,因为它在 STL 之前就广泛存在了:)
JohnFractal 2003-10-17
  • 打赏
  • 举报
回复
感谢 plainsong(短歌) 的提示,原来,我心目中的stream其实就是c++中的streambuf,而c++的iostream实质上就是我心目中想的那个stringstream

自己的思维与标准的不一样,难怪会出错 :), 看来要去买本《C++标准库》了
短歌如风 2003-10-17
  • 打赏
  • 举报
回复
stream本身提供两种不同的访问方式(正文格式和二进制格式),而stringstream和fstream的区别不在于格式而在于流的目标(文件还是内存)。

既然你在使用二进制方式,你应该使用streambuf_iterator而不是stream_iterator。

此外,注意要使用ios::binary方式打开fstream,以避免"\n"和"\r\n"间的转换。
sevencat 2003-10-17
  • 打赏
  • 举报
回复
用得不多,我一般用fopen,fclose,fprintf

24,854

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧