首先说,在C++中,#include "iostream"
与#include "iostream.h"
的区别:
iostream是C++的头文件,iostream.h是C的头文件,即标准的C++头文件没有.h
扩展名;而将以前的C的头文件转化为C++的头文件后,有时加上c的前缀表示来自于c,例如cmath
就是由math.h
变来的,或者直接不加。
一般C里带“.h”扩展名的库文件,比如iostream.h
,在新标准后的C++标准库中都有一个不带“.h”扩展名(iostream)的与之相对应,区别除了后者的好多改进之外,还有一点就是后者的东东都塞进了std
名字空间中。
但唯独string
很特别
C++在头文件中定义了string
类,但问题在于C++要兼容C的标准库,而C的标准库里碰巧也已经有一个名字叫做string.h
的头文件,这个头文件跟C++的string类并没有什么关系,所以并非的“升级版本”,他们是毫无关系的两个头文件。
所以区别就是:
头文件 | 描述 |
---|---|
string.h | 旧的C 头文件,对应的是基于char*的字符串处理函数; |
string | 包装了std 的C++头文件,对应的是新的string 类; |
cstring | 对应于旧C 头文件的std 版本。 |
另外
CString
是MFC
中定义的字符串类,MFC中很多类及函数都是以CString为参数的,另外CString类重载了LPCSTR
,(即const char*)运算符,所以如果你在MFC下面使用CString类,就可以直接用CString类做为参数来调用需要一个C语言风格字符串的WinAPI函数,编译器会自动调用LPCSTR
成员函数完成从CString到一个C风格字符串的转换。如果你在MFC下使用C++语言中标准的string类,那么在调用需要C语言风格的字符串为参数的WinAPI时,你必须显示调用string.c_str()成员函数,来完成同样的转换,也就是说在MFC里,如果用CString类,会比sting类方便那么一点点。