您的位置:首页 > 其它

头文件 string / string.h(和cstring等价) / cstring

2010-02-11 00:01 155 查看
#include<cstring> #include<string> #include<string.h>有什么区别啊?

(http://topic.csdn.net/t/20041030/00/3505110.html)

#include <cstring> //不可以定义string s;可以用到strcpy等函数

using namespace std;

#include <string> //可以定义string s;可以用到strcpy等函数

using namesapce std;

#include<string.h> //不可以定义string s;可以用到strcpy等函数

这三种到底有什么区别啊?

string // C++ STL 字符串类

string.h // C字符串函数 (strcpy()、strcat()、strcmp()等)

cstring // 用namespace std包含过的C字符串函数 (C++在移植C的头文件时前面会加前缀'c')

C++有字符串的标准类string,string类也有很多方法,这是C++标准库的东西,包含头文件string就行

但是现在它同样包含了C风格字符串操作函数的定义(应该是通过包含string.h实现的)

cstring就是string.h,只不过封装在std里面

(http://topic.csdn.net/u/20090109/09/3f778ed3-801b-4061-85d4-c28a4e26729d.html)

一般一个C++的老的带".h"扩展名的库文件,比如iostream.h,在新标准后的标准库中都有一个不带".h"扩展名的相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了"std"名字空间中。

但唯独string特别。

问题在于C++要兼容C的标准库,而C标准库里碰巧也已经有一个名字叫做"string.h"的头文件,包含一些常用的C字符串处理函数,比如strcmp等。

这个头文件跟C++ string类半点关系也没有,所以<string>并非<string.h>的"升级版本",他们是毫无关系的两个头文件

C++头文件的现状:

旧的C++头文件名如<iostream.h>将会继续被支持,尽管它们不在官方标准中。这些头文件的内容不在名字空间std中。(vs2008中#include <iostream.h>,error: 无法打开包括文件iostream.h)

新的C++头文件如<iostream>包含的基本功能和对应的旧文件相同,但头文件的内容在名字空间std中。(在标准化的过程中,库中有部分细节被修改了,所以旧头文件和新头文件中的实体不一定完全对应。)

标准C头文件如<stdio.h>继续被支持。头文件的内容不在std中。具有C库功能的新C++头文件具有如<cstdio>这样的名字。它们提供的内容和相应的旧C头文件相同,只是内容在std中。

初看这些有些奇怪,但不难习惯它。最大的挑战是把字符串头文件理清楚:

<string.h> 是旧的C头文件,对应的是基于char* 的字符串处理函数;

<string>是包装了std的C++头文件,对应的是新的string类;

<cstring>是对应于旧C头文件的std版本。

(http://topic.csdn.net/u/20070402/18/7111613b-c5e4-485e-a5d0-33de9aebbaea.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: