博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
#include<iostream>与#include<iostream.h>的区别
阅读量:5788 次
发布时间:2019-06-18

本文共 2208 字,大约阅读时间需要 7 分钟。

这两者都有什么不同呢?首先,5年前我们就开始反对把.h符号继续用在标准的头文件中。继续使用过时的规则可不是个好的方法。从功能性的角度来讲,<iostream>包含了一系列模板化的I/O类,相反地<iostream.h>只仅仅是支持字符流。另外,输入输出流的C++标准规范接口在一些微妙的细节上都已改进,因此,<iostream>和<iostream.h>在接口和执行上都是不同的。最后,<iostream>的各组成都是以STL(Standard Template Library,标准模板库)的形式声明的,然而<iostream.h>的各组成都是声明成全局型的。

        因为这些实质上的不同,你不能在一个程序中混淆使用这两个库。做为一种习惯,在新的代码中一般使用<iostream>,但如果你处理的是过去编写的代码,为了继承可以用继续用<iostream.h>就保持代码的一致性。

/

<iostream>表示你使用的是标注命名空间,也就是在程序开始应该有这么一句话
using namespace std ; 这是遵循c++标准的
<iostream.h> 则没有遵循c++标准
/
<string.h>是旧的C头文件,对应的是基于char*的字符串处理函数;
<string>是包装了std的C++头文件,对应的是新的strng类;
<cstring>是对应旧的C头文件的std版本。

#include <iostream.h> 和 #include <iostream>   

前一个不是c++标准中的,后一个在c++标准中

还有就是平时我们所用的两种情况,当有输出和输入流时就要注意了。

换成#include <iostream>,要加一句using namespace std;或把cout改成std::cout,end改成std::endl等等

///

这个问题牵扯到命名空间,以下简单介绍命名空间的优点:

// one.h char func(char); class String { ... };

// somelib.h class String { ... };

如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。比如: // one.h namespace one { char func(char); class String { ... }; }

// somelib.h namespace SomeLib { class String { ... }; }

std是C++标准库定义的标准命名空间,可以先记住这两种方式,时间长了就明白了

/

对于这个问题,某个马嘉楠老师如是说:

其实没有< iostream.h > 这样的东西 --- 标准化委员会在简化非C标准头文件时< iostream > 取代了它。但又没有完全取消 < iostream.h > 的使用,并且很多编译器都同时支持< iostream > 和< iostream.h > ,造成现在的局面,老大(标准化委员会)确实有不得已的苦衷。

 

        话说当年,在标准化委员会动手重建新的标准库的时候,遇到了问题。为了避
类名和函数名的冲突问题,引入了名字空间std。但无数现有的C++代码都依
赖于
使用了多年的伪标准库中的功能,例如,声明在< iostream.h > 和
< complex.h > 等
头文件中的功能。现有软件没有针对使用名字空间而进行相应
的设计或升级,
如果用std来包装标准库导致现有代码不能使用,那手底下的
小弟(程序员)是不
会同意的。
        标准化委员会为了拉拢人心,吸引更多的人入会,决定为包装了std的那部分标
库构建新的头文件名。将现有C++头文件名中的.h去掉,所以就出现了
< iostream.h> 和< iostream > 等很多双胞胎。对于C头文件,采用同样方法但
在每
个名字前还要添加一个C,所以C的<string.h> 变成了<cstring>。
      旧的C++头文件是官方明确反对使用的,但旧的C头文件则没有(以保持对C的
容性)。其实编译器制造商不会停止对客户现有软件提供支持,所以在可以
预计
的将来,旧的C++头文件还会嚣张一段时间。
如果能明白字符串头文件的使用,举一反三,其他的也差不多会用了。
  • <string.h> 是旧的C头文件,对应的是基于char*的字符串处理函数;
  • <string> 是包装了std的C++头文件,对应的是新的strng类;
  • <cstring> 是对应旧的C头文件的std版本。
        跑远了,言归正传。如果你的编译器都同时支持< iostream > 和< iostream.h >,
那使用 #include < iostream >,得到的是置于名字空间std下的iostream库的元
素;
果使用 #include < iostream.h >,得到的是置于全局空间的同样的元素。
在全局
空间获取元素会导致名字冲突,而设计名字空间的初衷正是用来避免这
种名字冲
突的发生。还有,打字时< iostream > 比 < iostream.h > 少两个字,所
以我会使用
< iostream > ^_^

转载地址:http://khlyx.baihongyu.com/

你可能感兴趣的文章
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>
python的图形模块PIL小记
查看>>
shell变量子串
查看>>
iOS的主要框架介绍 (转载)
查看>>
react报错this.setState is not a function
查看>>
poj 1183
查看>>
从根本解决跨域(nginx部署解决方案)
查看>>
javascript实现的一个信息提示的小功能/
查看>>
Centos7.x:开机启动服务的配置和管理
查看>>
HTML5 浏览器返回按钮/手机返回按钮事件监听
查看>>
xss
查看>>
iOS:百度长语音识别具体的封装:识别、播放、进度刷新
查看>>
JS获取服务器时间并且计算距离当前指定时间差的函数
查看>>
华为硬件工程师笔试题
查看>>
jquery居中窗口-页面加载直接居中
查看>>
cd及目录快速切换
查看>>
Unity Shaders and Effects Cookbook (3-5) 金属软高光
查看>>