C++ 头文件cstring,string.h,string 三者的区别
2015-10-14 20:43
295 查看
1. 定义
//c版头文件 #include <string.h> //不可以定义string s;可以用到strcpy等函数 //c++版头文件 include <cstring> //不可以定义string s;可以用到strcpy等函数 using namespace std; //c++版头文件 #include <string> //可以定义string s;不可以用到strcpy等函数 using namesapce std; **重点内容** //一般正确的使用方法 #include <string.h> #include <string> using namespace std; 或者 #include <cstring> #include <string> using namespace std;
2. 描述
1)文件cstring,和string.h对应,是c++版本的头文件,包含比如strcpy之类的字符串处理函数。2)文件string.h,和cstring对应,是c版本的头文件,包含比如strcpy之类的字符串处理函数。
3)文件string,包含std::string的定义,属于STL范畴。
即:
string.h是C语言中字符串操作函数的头文件
cstring是c++对C语言中的strcpy之类的函数申明,包含cstring之后,就可以在程序中使用C语言风格的strcpy之类的函数。
string是c++语言中string类模板的申明
3. 关系
(1). 首先说cstring与string.h:cstring和string.h其实里面都是C标准库提供的东西,某些实现中cstring的内容
就是:
namespace std { #include <string.h> }
cstring是C++的组成部分,它可以说是把C的string.h的升级版,但它不是C的组成部分。
所以如果你用的是C++,那么请用cstring,如果你用的是C请用string.h。
(2). string与cstring:
一般,一个C++库老的版本带“.h”扩展名的头文件,比如iostream.h,在新标准后的标准库中都有一个不带“.h”扩展名的相对应,
区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了“std”名字空间中。
string,它是C++定义的std::string所使用的文件,是string类的头文件,属于STL范畴。它有很多对字符串操作的方法。
4. 缘由
(1)string.h是C++标准化(1998年)以前的C++库文件,在标准化过程中,为了兼容以前,标准化组织将所有这些文件都进行了新的定义,加入到了标准库中,加入后的文件名就新增了一个”c”前缀并且去掉了.h的后缀名,所以string.h头文件成了cstring头文件。但是其实现却是相同的或是兼容以前的。相当于标准库组织给它盖了个章,说“你也是我的标准程序库的一份子了”(2)cstring代表的是string.h,但是被封装到了std里面,譬如调用strlen函数,需要写成std::strlen(yourstr)才行,这个使用方法比较符合C++的标准要求string就是C++标准库里面的string模板(确切地说应该是一个特化的模板),但是他同样包含了C风格字符串操作函数的定义(应该是通过包含string.h实现的)string.h就不需要使用名字空间了,这个是C风格字符串操作的一个函数库,strlen,strcpy,strcat,strcmp……都在这里面了,不过既然是C风格的库,当然不需要namespace支持了。
最后:
旧的C++头文件是官方所反对使用的(即,明确列出不再支持),但旧的C 头文件则没有(以保持对C 的兼容性)。
实际上,编译器制造商不会停止对客户现有软件提供支持,
所以可以预计,旧的C++头文件在未来几年内还是会被支持。
参考文献:
http://bbs.csdn.net/topics/100167667
相关文章推荐
- ARM裸机程序开发(十):C语言环境初始化
- 关于c语言中的字符数组的输入问题
- C语言第一课练习
- C语言第二课练习
- C语言 unsigned 和 signed 类型相互转换深入理解
- C语言第三课练习
- c语言中的fgets函数
- C语言第四课练习
- struct和typedefstruct 的区别
- sscanf() 的作用
- C语言第五课练习
- 深度探索C语言函数可变长参数
- [c++] How many bytes do pointers take up?
- C++Primer学习:动态内存与智能指针(3)
- [原]《征服C指针》读书笔记
- 小小君的C语言第五课
- c语言几个点
- 【c++程序】虚函数的本质
- 【c++程序】 多态与虚函数
- [c++]类型转换