输入输出流为什么叫做流? 难道它本身有特性?

就C++来讲,scanf函数和它又有什么不同?为什么就cin和cout能被称作是"流"而scanf这样的就没人叫它流?仅仅是因为cin它们继承自一个流对象?... 就C++来讲,scanf函数和它又有什么不同?为什么就cin和cout能被称作是"流"而scanf这样的就没人叫它流?
仅仅是因为cin它们继承自一个流对象?
展开
 我来答
FrankHB1989
推荐于2016-07-03 · TA获得超过4.2万个赞
知道大有可为答主
回答量:4569
采纳率:100%
帮助的人:3162万
展开全部
流是根据连续传输特性命名的一种信息序列,也可以认为是一种抽象的数据结构。流不能直接被随机读写,而可以顺序读写,因此如果要取得其中的数据需要的时间开销和数据的位置相关。作为对比,一般的连续线性表(例如储存在内存中的数组)可以根据下标作为索引在常数时间复杂度内定位至其中的任一位置进行读写(随机读写)。流可以用来抽象低速存储介质(不支持随机读写)中的信息,例如硬盘和网络文件等。
在C语言中,流被实现为标准库实现的内部结构,通过文件指针(FILE*对象)可以表示流(外存储器中的文件也被作为流来进行读写),提供平台无关的操作方式。存在三种标准的流:标准输入流stdin、标准输出流stdout和标准错误输出流stderr。默认情况(不经过重定向)下,标准输入流在控制台程序中映射为键盘输入,后两者一般为控制台输出。scanf、printf等标准输入/输出函数专门对stdin和stdout进行操作,在库的底层往往和对应函数的流操作版本共用实现。例如scanf("%d", &i);相当于fscanf(stdin, "%d", &i);——也就是scanf等也是对流进行操作,只不过这里的流被隐含地限定为stdin/stdout。另外一个重点是提供了缓冲机制(标准错误输出流是无缓冲的),可以显著提升读写效率(如果直接使用平台相关的外部API、系统调用等,为了操作硬件可能需要频繁切换操作系统状态,效率很低)。同时由于缓冲的存在,顺序读写进行定位时的性能更加稳定(例如fseek之类对程序员而言基本是O(1),不管定位到哪里,时间开销基本没什么区别)。
C++继承了C语言中对流的操作方式,同时在标准库中(包含<iostream>、<fstream>等)对流操作进行另一个角度的封装。以上三个标准流的对应对象为cin、cout和cerr。对于这些对象的基本操作效果(也是它们存在的意义)在本质上和C是相同的(缓冲实现等细节有所区别;另外cin和cout是有缓冲的,cerr还是无缓冲的),只是使用的语言特性不同——例如可以根据参数类型在编译期确定输出的格式,配合运算符重载的operator<<和operator>>,而不需要在运行期解析格式控制字符串;使用cout<<endl而不用fflush(stdout)等等。
====
[原创回答团]

参考资料: 原创

来自:求助得到的回答
★屠龙★af5891
2010-08-25 · TA获得超过2569个赞
知道小有建树答主
回答量:1133
采纳率:0%
帮助的人:1269万
展开全部
因为C++中,把他们看做流,更具有普遍的通用性也是C++的一个特点之一,你这里看到的是狭义的流,比如打印文件,我可以把打印机看做一个屏幕一样,让打印内容流进去,在C++的流中,可以看做数据在各种对象中流来流去,是一种思想。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xiongrencai
2010-08-25 · 超过19用户采纳过TA的回答
知道答主
回答量:54
采纳率:0%
帮助的人:65.3万
展开全部
这个流不是水流动的流,这里只是一个词,其实是文件共享的问题,一个文件共享,然后一个程序写,另一个程序读,这样就形成了通信,输入输出就是这样。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
伤倏臀w
2010-08-25 · TA获得超过1115个赞
知道大有可为答主
回答量:864
采纳率:60%
帮助的人:609万
展开全部
它就是这么个叫法,<< 这个符号就像水流,所以这么叫,其中只是格式不同,其他没有区别
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式