转载于:http://www.cnblogs.com/charley_yang/archive/2010/12/08/1900715.html

1.从功能性的角度来讲,<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版本。

(标准化委员会为了拉拢人心,吸引更多的人入会,决定为包装了std的那部分标准库构建新的头文件名。将现有C++头文件名中的.h去掉,所以就出现了<
iostream.h> 和< iostream >
等很多双胞胎。对于C头文件,采用同样方法但在每个名字前还要添加一个C,所以C的<string.h> 变成了<cstring>。)

#include <iostream.h> 和 #include <iostream>  
前一个不是c++标准中的,后一个在c++标准中

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

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

#include <iostream.h>
c++标准化之前的使用方式.
#include <iostream>
using namespace std;
这个必须同时出现.c++标准化后推荐使用的方式.主要是因为namespace的引入.

#include <..> 是从标准库里直接提取头文件
#include ".. "是先从源文件当前目录提取头文件,再从标准库里提取。

一般自己写的文件用 " "

2.为什么下面这段代码

1 #include <string.h>
2 void main()
3 {
4 string aaa= "abcsd d";
5 printf("looking for abc from abcdecd %s\n",
6 (strcmp(aaa,"abc")) ? "Found" : "Not Found");
7 }

不能正确执行,说是string类型没有定义
而下面:

1 #include <string>
2 using namespace std;
3 void main()
4 {
5 string aaa= "abcsd d";
6 printf("looking for abc from abcdecd %s\n",
7 (strcmp(aaa,"abc")) ? "Found" : "Not Found");
8 }

这里的string编译器就认识了,但是strcmp就不认识了呢?
---------------------------------------------------------------
一般一个C++的老的带“.h”扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了“std”名字空间中。
但唯独string特别。
问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做“string.h”的头文件,包含一些常用的C字符串处理函数,比如楼主提到的strcmp。
这个头文件跟C++的string类半点关系也没有,所以<string>并非<string.h>的“升级版本”,他们是毫无关系的两个头文件。
要达到楼主的目的,比如同时:
#include <string.h>
#include <string>
using namespace std;
或者
#include <cstring>
#include <string>
其中<cstring>是与C标准库的<string.h>相对应,但裹有std名字空间的版本。

转自:http://www.cnblogs.com/leven20061001/archive/2012/09/26/2703685.html

#include<iostream>与#include<iostream.h>以及#inclue<string> 和 #include<string.h>的区别的更多相关文章

  1. configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/

    编译php出现错误: configure: error: Please reinstall the libcurl distribution - easy.h should be in <cur ...

  2. 解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...

  3. 配置apue的头文件apue.h和unp的头文件anp.h

    配置apue的头文件apue.h和unp的头文件anp.h 如果要使用gcc -g 来生成可调试文件一定要修改Make.defines.linux文件中的CFLAGS变量 修改为:CFLAGS=-an ...

  4. .h头文件和.c文件的作用和区别

    .h头文件和.c文件的作用和区别 在小工程中,.h的作用没有得到充分的使用,在大工程中才能充分体现出.h文件的作用. .h和.c文件都是代码.头文件好处有: 一:头文件便于共享,只需要添加一句“inc ...

  5. 配置redis, make的时候: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    今天正在centos7.3里面配置redis3.0, 结果make的时候抛出编译中断 CC adlist.o In file included from adlist.c:34:0: zmalloc. ...

  6. 【Redis】编译错误zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory

    [Redis]编译错误zmalloc.h:50:31: fatal error: jemalloc/jemalloc.h: No such file or directory 在安装redis进行编译 ...

  7. In file included from adlist.c:34:0: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    问题: In file included from adlist.c:34:0:zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录 解决: make ...

  8. redis安装zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录

    问题: zmalloc.h:50:31: 致命错误:jemalloc/jemalloc.h:没有那个文件或目录 解决方案:执行命令:make MALLOC=libc make MALLOC=libc

  9. MFC项目中包含atlimage.h导致fatal error C1189: #error : WINDOWS.H already included. MFC apps must not #include <windows.h>

    因为要用到CImage所以包含了atlimage.h 报这个错误的话你只需要把atlimage.h放在afxwin.h的下方即可,不能让它在afxwin.h的上方

随机推荐

  1. 欧几里得算法(及扩展)&&快速幂(二分+位运算)

    最近在二中苦逼地上课,天天听数论(当然听不懂) 但是,简单的还是懂一点的 1.欧几里得算法 说得这么高级干什么,gcd入门一个月的人都会吧,还需要BB? 证明可参照其他博客(不会),主要就是gcd(a ...

  2. oracle10g安装在裸设备上

    参考了百度文库上的 <在​裸​设​备​上​面​安​装​o​r​a​c​l​e​1​0​g> 一文. 不过为了简单起见,我选择OS 为 Redhat AS 4.8 32位. 准备安装数据库为 ...

  3. MFC CHotKeyCtrl控件

    知识点: CHotKeyCtrl控件 获取热键数据 注册热键 响应热键事件 一.CHotKeyCtrl控件 void SetHotKey( WORD wVirtualKeyCode, WORD wMo ...

  4. [Deep-Learning-with-Python] Keras高级概念

    Keras API 目前为止,介绍的神经网络模型都是通过Sequential模型来实现的.Sequential模型假设神经网络模型只有一个输入一个输出,而且模型的网络层是线性堆叠在一起的. 这是一个经 ...

  5. Hadoop开发第3期---Hadoop的伪分布式安装

    一.准备工作 1. 远程连接工具的安装 PieTTY 是在PuTTY 基础上开发的,改进了Putty 的用户界面,提供了多语种支持.Putty 作为远程连接linux 的工具,支持SSH 和telne ...

  6. Yii2中的format

    关于format,这个也非常方便, 用来格式化内容的. 如下代码: <?= DetailView::widget([ 'model' => $model, 'attributes' =&g ...

  7. TMS320VC5509驱动AT24C02

    1. 刚开始的波形不太对,比如如下代码 i2c_status = I2C_write( at24c02_write_buf, //pointer to data array , //length of ...

  8. idea 开启 tomcat 访问日志记录

    all 为 设置为 查看所有类型的请求 (包括ajax)

  9. BLCR技术初探

    BLCR技术到底是什么技术?我没空和你乱扯,自己去看该官方网站的介绍:http://crd.lbl.gov/groups-depts/ftg/projects/current-projects/BLC ...

  10. 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard

    目录 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard 正文 对我的启发 机器学习英雄访谈录之 DL 自由职业者:Tuatini Godard Sanyam Bhutani 是 M ...