As much as I use and appreciate the Standard C++ Library, I've never liked its string template - basic_string<>. At times, it seems the designers went out of their way to make it difficult to use.
On the other hand, I've always loved the ease of use of MFC's CString class. It checks for NULL pointers, implicitly converts to const TCHAR*, and has some very handy member functions (Format, Load, etc.) that make string programming a breeze. But of course, I don't want to use MFC anymore. In fact, I don't want to rely on any proprietary library because I want portability.
Go to Parent(I realize this response is over a year late. I don't appear to be being notified when people reply to this article)
"Performance" is a fairly encompassing term. Most of the performance differences will come down to the performance of std::string vs CString. That depends upon your particular implementation of basic_string, over which I have no control
For the performance of various CString-facade functions (e.g. format), well at this point I am long past comparing those or worrying about it. It is not going to make a difference in 99% of the cases. You would have to be doing some monster-level of string processing for it to matter.
If that sounds like a bit of a dismissal, I suppose it is. This class is mostly meant to help people transition over from CString to std::string with a minimum of code-rewrite. To help you get off of MFC> The idea is that you can get your code running right away and then start refactoring any important string processing code to use basic_string properly, in the most efficient way you see fit. This class is not meant to be used alongside CString. But if it must, well you can then always use CString instead. This class coexist well with it.