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"
).
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"
).