MFC CString 构造函数操作

MFC CString Constructor action

CString Str1 = "ABC";
CString Str2 = Str1 + "123"; // Understandable
CString Str3 = "123" + Str1; // How does it work? Is there data overriding?

虽然Str1在'+'右边,但最后一个操作是否使用CString'+'运算符重载? 谢谢回答。

CString Str3 = "123" + Str1;

Here 您可以看到 CString 支持的 operator+ 的各种重载,其中之一包括上面的示例。

注意:不支持像下面这样连接两个字符串文字,因为这等同于添加两个指针。

CString Str3 = "123" + "456"

MFC/ATL CStringT class template provides the following operator+ 运算符作为自由函数:

friend CStringT operator+(const CStringT& str1, const CStringT& str2);
friend CStringT operator+(const CStringT& str1, PCXSTR psz2);
friend CStringT operator+(PCXSTR psz1, const CStringT& str2,);
friend CStringT operator+(char ch1, const CStringT& str2,);
friend CStringT operator+(const CStringT& str1, char ch2);
friend CStringT operator+(const CStringT& str1, wchar_t ch2);
friend CStringT operator+(wchar_t ch1, const CStringT& str2);

语句 CString Str3 = "123" + Str1; 不能使用 class 成员,因为 + 表达式的左侧没有 class 对象,也没有用户-定义隐式转换运算符。它需要调用一个自由函数,并使用带有 PCXSTR 参数的重载。

请注意,这意味着您的项目设置为使用 ANSI (MBCS) 编码。这通常是不可取的。改为使用 Unicode,方法是设置适当的预处理器符号(有关详细信息,请参阅 Working with Strings),或者明确使用宽字符版本 (CStringW) 并在字符串文字前加上 L (L"123").