No characters are copied; only a pointer is returned. Be careful with this operator. If you change a CString object after you have obtained the character pointer, you may cause a reallocation of memory that invalidates the pointer.

// If the prototype of a function is known to the compiler,
// the PCXSTR cast operator may be invoked implicitly.
CSimpleStringT strSports( _T ( "Soccer is Best!" ) );
TCHAR sz[1024];
lstrcpy( sz, strSports );
// If the prototype isn't known or is a va_arg prototype,
// you must invoke the cast operator explicitly. For example,
// the va_arg part of a call to sprintf( ) needs the cast:
sprintf( sz, "I think that %s!\n", ( PCXSTR ) strSports );
// While the format parameter is known to be an PCXSTR and
// therefore doesn't need the cast:
sprintf( sz, strSports );
// Note that some situations are ambiguous. This line will
// put the address of the strSports object to stdout:
cout << strSports;
// while this line will put the content of the string out:
cout << ( PCXSTR ) strSports;