c语言cstdio什么意思,<iostream>与<cstdio>有什么区别?

c语言cstdio什么意思,<iostream>与<cstdio>有什么区别?该楼层疑似违规已被系统折叠隐藏此楼查看此楼列个提纲:1.cstdio是面向“文件”的,或者不强调文件和非文件流的区别,默认流就是可以关联外部文件,至于文件的外延是啥就不管,扔给宿主环境了。从std::FILE这个名字以及printf/scanf接口描述基于fprintf/fscanf上就可以看出来。iostream头只是包含了一坨东西,封装标准输入输出流,和文件流(在)不通用。2.cstdio不…

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

列个提纲:

1.cstdio是面向“文件”的,或者不强调文件和非文件流的区别,默认流就是可以关联外部文件,至于文件的外延是啥就不管,扔给宿主环境了。从std::FILE这个名字以及printf/scanf接口描述基于fprintf/fscanf上就可以看出来。

iostream头只是包含了一坨东西,封装标准输入输出流,和文件流(在)不通用。

2.cstdio不知道iostream,而iostream知道cstdio并且默认同步,此外提供有限的接口摆脱关系(sync_with_stdio)。因为这个接口约束,iostream要脱离cstdio(的实现)是不太可能的。

3.cstdio有orientation的概念;iostream是否wide是直接写死在静态类型的模板参数里的,并且底层的流不只支持char和wchar_t字符类型。

4.iostream底层公开了相对完整的缓冲接口(如std::basic_filebuf),可以自行扩展;cstdio只能笼统地设置缓冲模式和提供提供区的接口,但多了行缓冲的概念(_IOLBF)。

5.iostream和std::locale交互。C标准库的(对应C++的)提供locale-specific behavior,和cstdio不直接关联。两者不是一回事。

因为这个原因,iostream能直接编解码字符串,而cstdio不能处理和wide-oriented无关的编码,需要(对应C++的)或C11的的例程显式调用。

6.iostream体系提供了基于字符串提供了“内存流”(主要是std::stringstream),而cstdio这部分一般只是内部实现,如果需要得自己造。

7.iostream底层通过继承和重写protected虚函数提供实现。cstdio这部分是内部实现,不提供与之对应的扩展功能。

8.两者都实现了流的状态,但不尽相同。iostream显式区分bad和fail,但cstdio没有。

9.iostream提供特定的打开模式的组合,而cstdio使用字符串参数。前者无法直接扩展;后者解析较低效,虽然不需要修改类型就可扩展但也存在实现的运行时兼容性问题。

10.除了检查流的状态,iostream处理错误可选使用异常。cstdio处理错误依赖返回值和流状态。

11.iostream的格式输入输出基于重载,静态分派且类型安全,可以实现得更高效;cstdio的格式输入输出使用的是领域特定语言,需要运行时解析,通常比较低效,且实现的运行时兼容问题修复较困难。

但后者同时提供运行时配置可修改的格式的功能,而前者没有。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234629.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • python中encode和decode的区别_python isalpha

    python中encode和decode的区别_python isalpha在python中,我们通常使用的是unicode编码,但是日常文本使用各类编码为utf-8,编码的类型不一样,就容易造成乱码。为了避免读写操错误,我们需要进行转码则需要decode(解码)和encode(编码)方法。1、decode的作用是将其他编码的字符串转换成unicode编码将bytes类型转换为str类型(b.decode())2、encode的作用是将unicode编码转换成…

    2022年10月6日
  • pycharm2021.2激活码(已测有效)

    pycharm2021.2激活码(已测有效),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月14日
  • phpstrom 2021激活码(最新序列号破解)

    phpstrom 2021激活码(最新序列号破解),https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月18日
  • 3.5使用RangeValidator控件

    3.5使用RangeValidator控件使用RangeValidator控件检测表单字段的值是否在指定的最小值和最大值之间五个属性:ControlToValidate—被验证的表单字段的IDText--验证失败时显示的错误信息MininumValueMaxinumValueType-比较类型:String,Integer,Double,Date和Currency默认为String[code…

    2022年7月14日
  • 孙鑫老师 java从入门到精通 视频教程 批量下载

    孙鑫老师 java从入门到精通 视频教程 批量下载本视频教程是孙鑫老师亲自开发录制的,内容涵盖了java技术从入门到精通整个过程。对于java爱好者是一套不可多得的教材!相信下载此教程的同志都是未来的电脑高手,对于批量下载的方法我在这时就不一一说了,相信兄弟们都能找到这种简单规律。这里以第三课批量下载为例简单说一下:(记得将通配符长度设为1哦)第一课Java的一些基本概念http://www.ibook8.com/te

    2022年5月17日
  • 内外网数据库同步方式「建议收藏」

    内外网数据库同步方式「建议收藏」项目环境:公司中心有一个数据库,产品部署地有多个,每个部署地是一个局域网,部署地内有一台对外通讯的服务器(可能会断网)。项目需要将每个部署地的部分数据,同步到中心数据库。基本思路:在需要同步的数据库的说明中添加Update标识,在需要同步的表中添加UpdateDate字段。在每一天的0点时候,会执行一次同步,根据UpdateDate字段进行时间比对,同步会遍历当前数据库的所以后表,如果表中包含

    2022年10月16日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号