CString与string的区别

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CString与string的区别相关的知识,希望对你有一定的参考价值。

分别要包含什么头文件和用法和好处

CString 是MFC或者ATL中的实现,
string是C++标准库中的实现
string和CString均是字符串模板类,string为标准模板类(STL)定义的字符串类,已经纳入C++标准之中;
  CString(typedef CStringT<TCHAR, StrTraitMFC<TCHAR>> CString)为Visual C++中最常用的字符串类,继承自CSimpleStringT类,主要应用在MFC和ATL编程中,主要数据类型有char(应用于ANSI),wchar_t(unicode),TCHAR(ANSI与unicode均可);
  char*为C编程中最常用的字符串指针,一般以’\0’为结束标志;

在MFC、ATL中使用字符串尽量使用CString,毕竟都是微软的孩子,各方面都比其它更有优势,而在非微软平台上或对移植性要求较高的场合推荐使用string,标准模板库提供了那么强大的泛型算法,没必要再自己去造车轮。
参考技术A string 是 语言的东西 是c++语言的
CString 是VC++ IDE内嵌的,是MFC的
不是一个概念
CString 离开VC++不能用
string 在任何支持C++的IDE中都能用
参考技术B CString 类是微软的visual c++提供的MFC里面的一个类,所以只有支持MFC的工程才可以使用。如在linux上的工程就不能用CString了,只能用标准C++中的 string类了。另外,因为string类是在c++标准库中,所以它被封装在了std命名空间中,使用之前需要声明using namespace std;而CString类并不在std命名空间中,因为它不是c++的标准库,只是微软的一个封装库。这点看来用string类的程序的移植性更好。
(2)string类既是一个标准c++的类库,同时也是STL(Standard Template Library,标准模版库)中的类库,所以支持Iterator操作。
(3)CString类和string类提供的方法接口并不完全相同,所以不要糊里糊涂的认为某个类中怎么没有另外一个类中的方法啊。:-)。。
(4)他们和char*之间的转换方法也不一样。

CString与string相互转换

CString转string 例子:

CString strMfc = "test";
std::string strStr;
strStr = strMfc.GetBuffer(0);

string转CString 例子:

CString strMfc;
string strStr = "test";
strMfc = strStr.c_str();


以上是关于CString与string的区别的主要内容,如果未能解决你的问题,请参考以下文章

CString 赋值的区别

VC++ 6.0当中,CString和string这两种类型有啥区别?

string和cstring头文件的区别

C语义char*显示中文---ASCIIDBCSUnicode三种编码---char* CString string区别

String,CString,TCHAR,char之间区别和联系

Cstring与char*String转Cstring(unicode编码)