(1) Overview
String and CString are both string template classes. string is a string class defined by the standard template class (STL) and has been incorporated into the C ++ standard;
CString (typedef CStringT> CString) is the most common string class in Visual C ++. It inherits from the CSimpleStringT class and is mainly used in MFC and ATL programming, the main data types include char (used in ANSI), wchar_t (unicode), and TCHAR (both ANSI and unicode );
Char * is the most commonly used string pointer in C programming. It generally ends with '/0;
(2) Construction
String is convenient and can be constructed from almost all strings, including CString and char *;
Followed by CString, which can be constructed from some basic string variables, including char;
Char * has no constructor and can only be assigned a value;
Example:
Char * psz = "joise ";
CString cstr (psz );
String str (cstr );
(3) Operator Overloading
A) operator =
String is the most convenient, and almost all strings can be assigned directly, including CString and char *;
Followed by CString. You can directly assign values using some basic strings, including char;
Char * can only be assigned values by pointers, which is extremely dangerous. We recommend that you use strcpy or memcpy. In addition, if the initial value is not assigned to char *, we recommend that you set it to NULL first, to avoid wild pointers and drive you crazy;
Example:
Char * psz = NULL;
Psz = new char [10]; // Of course, the above is directly written as char * psz = new char [10 ];
Memset (psz, 0, 10 );
Strcpy (psz, "joise ");
CString cstr;
Cstr = psz;
String str;
Str = psz;
Str = cstr;
Delete [] psz;
B) operator +
String is similar to CString. It can be added directly to char *, but the + operator cannot be used with each other. That is, string str = str + cstr is invalid and must be converted to char *;
Char * has no + operation. Only two pointers can be connected using strcat;
Example:
Char * psz = "joise ";
CString cstr = psz;
Cstr = cstr + psz;
String str = psz;
Str = str + psz;
Strcat (psz, psz );
Strcat (psz, cstr); // valid
Strcat (psz, str); // invalid. Therefore, CString can be automatically converted to const char *, but string cannot.
C) operator ++ =
String is the most powerful and can be used with almost all string variables + =, including CString and char *;
Followed by cstring, which can be + = with some basic string variables, including char;
Char * has no + = Operator and can only use strcat to connect two pointers;
D) operator []
The cstring is the best. When a cross-border request is made, an asserted exception is thrown;
The results of the out-of-bounds string and char * subscripts are undefined;
Example:
Char * psz = "joise ";
Cstring CSTR = psz;
Cout <CSTR [8];
String STR = psz;
Cout <STR [8];
Cout <psz [8];
E) operator =, Operator! =, Operator>, operator <, operator> =, perator <=
Cstring and string cannot be compared, but both can be compared with char * and compared with the value rather than the address;
Cout <(psz = CSTR );
Cout <(psz = Str );
Cout <(STR = psz );
Cout <(CSTR = psz); // The code above returns 1
From http://www.vczx.com/article/show.php? Id = 845