一般一个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名字空间的版本。
C++标准库很大。非常大。难以置信的大。怎么个大法?这么说吧:在C++标准中,关于标准库的规格说明占了密密麻麻300 多页,这还不包括标准C 库,后者只是"作为参考"(老实说,原文就是用的这个词)包含在C++库中。当然,并非总是越大越好,但在现在的情况下,确实越大越好,因为大的库会包含大量的功能。标准库中的功能越多,开发自己的应用程序时能借助的功能就越多。C++库并非提供了一切(很明显的是,没有提供并发和图形用户接口的支持),但确实提供了很多。几乎任何事你都可以求助于它。在归纳标准库中有些什么之前,需要介绍一下它是如何组织的。因为标准库中东西如此之多,你(或象你一样的其他什么人)所选择的类名或函数名就很有可能和标准库中的某个名字相同。为了避免这种情况所造成的名字冲突,实际上标准库中的一切都被放在名字空间std 中(参见条款28)。但这带来了一个新问题。无数现有的C++代码都依赖于使用了多年的伪标准库中的功能,例如,声明在<iostream.h>,<complex.h>,<limits.h>等头文件中的功能。现有软件没有针对使用名字空间而进行设计,如果用std 来包装标准库导致现有代码不能用,将是一种可耻行为。(这种釜底抽薪的做法会让现有代码的程序员说出比"可耻" 更难听的话)慑于被激怒的程序员会产生的破坏力,标准委员会决定为包装了std 的那部分标准库构件创建新的头文件名。生成新头文件的方法仅仅是将现有C++头文件名中的.h 去掉,方法本身不重要,正如最后产生的结果不一致也并不重要一样。所以<iostream.h>变成了<iostream>,<complex.h>变成了<complex>,等等。对于C 头文件,采用同样的方法,但在每个名字前还要添加一个c。所
以C 的<string.h>变成了<cstring>,<stdio.h>变成了<cstdio>,等等。最后一点是,旧的C++头文件是官方所反对使用的(即,明确列出不再支持),但旧的C 头文件则没有(以保持对C 的兼容性)。
实际上,编译器制造商不会停止对客户现有软件提供支持,所以可以预计,旧的C++头文件在未来几年内还是会被支持。
所以,实际来说,下面是C++头文件的现状:
旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在名字空间std 中。新的C++头文件如<iostream>包含的基本功能和对应的旧头文件相同,但头文件的内容在名字空间std 中。(在标准化的过程中,库中有些部分的细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。)标准C 头文件如<stdio.h>继续被支持。头文件的内容不在std 中。具有C 库功能的新C++头文件具有如<cstdio>这样的名字。它们提供的内容和相应的旧C 头文件相同,只是内容在std 中。
所有这些初看有点怪,但不难习惯它。最大的挑战是把字符串头文件理清楚:
<string.h>是旧的C 头文件,对应的是基于char*的字符串处理函数;
<string>是包装了std 的C++头文件,对应的是新的string 类(看下文);
<cstring>是对应于旧C 头文件的std 版本。
如果能掌握这些(我相信你能),其余的也就容易了。
转自:http://bbs.csdn.net/topics/100167667

C++ 头文件cstring,string.h,string 三者的区别相关推荐

  1. string类 string.h头文件 cstring头文件区别以及读取一行字符串总结

    以前一直分不清string类  string.h头文件 cstring头文件的去别,今天ce了一发才稍微弄懂了. 首先C语言中只有string.h头文件,string.h包含了一些字符数组和字符串的函 ...

  2. 头文件cstring、string、string.h的区别

    头文件cstring.string.string.h的区别 <string>是C++标准库头文件,使用stirng类型必须首先包含string头文件,用于字符串操作,string类型可以进 ...

  3. c语言gets函数头文件string.h,string函数头文件

    string.h头文件中有什么函数 string.h头文件中的函数: #include //STL 通用算法 #include //STL 位集容器 #include //复数类 #include / ...

  4. 为什么C++中不引用string头文件还可以用string

    因为当前引用的库(< iostream >)已经隐式地包含了string头文件,所以无需显式引用该头文件也能够使用string. iostream 用到 ios_base这个类,而它的成员 ...

  5. 【C++】头文件 bits/stdc++.h 是啥?

    原文地址: [C++]头文件 bits/stdc++.h 是啥? 欢迎访问我的博客:http://blog.duhbb.com/ 嘿嘿, 以后写 leetcode 的话, 本地直接就引用这个文件, 还 ...

  6. 重要头文件: cc430x613x.h

    2019独角兽企业重金招聘Python工程师标准>>> 重要头文件: cc430x613x.h 来自:http://www.inventortown.com/includes/cc4 ...

  7. C11的对齐特性是在新的头文件中stdalign.h声明的

    void*aligned_alloc(size_t algn,size_t size); 分配size字节以algn字节对齐的内存,并返回指向所分配内存的指针. C11的对齐特性是在新的头文件中< ...

  8. C++预编译头文件 bits/stdc++.h

    有时候会看到别人包含这样的头文件: #include "bits/stdc++.h" 这个头文件中有很多预先包含的头文件,内容如下: // C++ includes used fo ...

  9. 高级c++头文件bits/stdc++.h

    用这种方法声明头文件只需两行代码 #include<bits/stdc++.h> using namespace std; 这个头文件包含以下等等C++中包含的所有头文件: #includ ...

最新文章

  1. ICCV19 (Oral) | 基于贝叶斯损失函数的人群计数
  2. 电脑如何格式化_分别手把手教你在Windows和mac上格式化磁盘
  3. 【正一专栏】运动式的创建文明城市要着干嘛
  4. bzoj5093: [Lydsy1711月赛]图的价值
  5. Android缓存学习入门(二)
  6. 奥鹏东师计算机应用基础18,免费在线作业答案奥鹏东师计算机应用基础15秋在线作业1试卷及答案(1)...
  7. php速度为什么快,为什么 === 的速度比 == 快?
  8. Java使用JNDI调用配置在服务器(Weblogic、Tomcat)的数据源配置
  9. 玩转Eclipse1--基本知识与配置
  10. 美国欲投 2.58 亿美元与中国争夺超算霸主地位
  11. 7.PHP核心技术与最佳实践 --- PHP 扩展开发
  12. 联想拯救者r7000p安装Linux双系统(一)
  13. Python 算法设计(2) - 大数运算 - 基于字符串的数字运算和进位
  14. python:实现使用分而治之找到单峰列表的峰值算法(附完整源码)
  15. 域名解析中TTL是什么意思?
  16. mysql的备份与还原步骤_MySQL备份与还原
  17. antDesign 自定义分页样式
  18. 如何修改Linux开启进度条的图片
  19. No tests found for given includes: [xxx.xxx.testList](filter.includeTestsMatching)
  20. 淘宝taobao.com步3721后尘晋升新网骚

热门文章

  1. Element UI - v-infinite-scroll无限滚动组件
  2. opencv——Sobel算子与Scharr算子
  3. html如何制作美观搜索栏,css制作好看的搜索框
  4. 计算机网络:常见的计网面试题整理(一)
  5. 吕鑫:VC++6.0就业培训宝典之MFC视频教程
  6. 记录小程序后端开发环境配置
  7. 算法导论—AC自动机
  8. 实验教学管理系统java源代码_基于jsp的实验教学管理系统-JavaEE实现实验教学管理系统 - java项目源码...
  9. netlogo实现turtles的移动
  10. Nowa Flutter开发教程之 03 界面布局