What is `CString`?

user1768079 picture user1768079 · Jan 23, 2013 · Viewed 54.9k times · Source

Why do I see some code using CStrings declared differently.

Some use this format

char a_c_string [];

While others use

CString another_c_string;

Is there a difference? All the references I have found on CStrings declare it as I did in the first example, I have only seen it done the other way on forums and the like where people are giving examples.

Answer

Lightness Races in Orbit picture Lightness Races in Orbit · Jan 23, 2013

CString is neither a C nor a C++ type. It appears to be a Microsoft invention that is essentially an alternative to std::string:

  • CString objects can grow as a result of concatenation operations.
  • CString objects follow "value semantics." Think of a CString object as an actual string, not as a pointer to a string.
  • You can freely substitute CString objects for const char* and LPCTSTR function arguments.
  • A conversion operator gives direct access to the string's characters as a read-only array of characters (a C-style string).

I recommend ignoring it, so that:

(a) people know what you are talking about;
(b) your code is portable;
(c) you are writing C++ that everybody can rationalise about according to the worldwide-accepted ISO C++ standard that many, many people spend many, many hours arguing about for this express purpose (y'know, as opposed to a few guys in a room in one company's office).

It will only be available when you are programming with Microsoft Visual C++, which is substantially limiting.