一直没弄清楚这三者 的关系,今天花了点时间仔细比较一番,记录下来,一方面便于日后回顾,二来希望他人可以少走弯路。
首先,要明确的是cstring, string, string.h 是三个文件名,而不是类名,如果你将vs2010(或者其它版本)安装在默认路径下,这三个文件可以在C:Program FilesMicrosoft VisualStudio 10.0VCinclude路径下找到,查看每个文件里面的内容,结合网上看的一些帖子,我得出以下结论:
1、string.h是C标准库下的文件,C++向兼容C,所以包含了该文件,这个文件应该是原封不动的与C标准库下一致的。类似这样的文件还有math.h,setjmp.h,stdlib.h,stddef.h等等C标准库下的头文件;
2、cstring是C++对string.h的简略升级与包装,并将它放置在命名空间std下,该文件的所有代码如下:
所以,使用cstring时要用using namespacestd,cstring里的内容与方法,应该与C标准库下的string.h一致。
3、而string就与前面两个有本质差别了。它是C++自己开发封装的类,同样用于字符串操作,其中用到了很多的操作符重载等方法,实现方法和C标准库中的string.h有很大差别。
另外容易混淆的是,在MFC中,还有CString类,它与cstring是有本质区别的,前者是类名,使用时包含头文件afx.h,后者是文件名,两者实现的方法也大相径庭。
个人总结,水平有限,如有不妥之处,敬请指正。
参考:http://blog.csdn.net/suyksuyk/article/details/4698020