ATL::CStringT与std::basic_string

我们再来看看神奇的CString,前面其实也提到过的,在Visual C++中,CString实际上是对模板类CStringT的一个特化版本,TCHAR 是个变色龙,因此CString也是一个变色龙:

typedef CStringT< TCHAR, StrTraitMFC< TCHAR > > CString;
CStringT继承于CSimpleStringT模板类
此外,还有两个类,它们分别对应于字符串的ANSI和宽字符版本:

typedef CStringT< wchar_t, StrTraitMFC< wchar_t > > CStringW;

typedef CStringT< char, StrTraitMFC< char > > CStringA;
也就是说,一般情况下,我们只推荐使用CString,它会根据字符集环境的设置自动适应。如果需要在动态环境下强制设定字符集,比如:你正在开发一个服务器的客户端程序,服务器它只认识char,那么你就要显式地指定CStringA或CStringW。

标准C++中的std::string也是一个basic_string模板类的特化版本:

typedef basic_string<char> string;
与其相关的宽字符版本:

typedef basic_string<wchar_t> wstring;
由上可以清晰看出,string代表ANSI版本,wstring代表宽字符版本。

你可能感兴趣的:(C++,c,C#)