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

#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)

  

你可能感兴趣的:(c,String,扩展,iostream)