MFC CString构造函数

时间:2018-11-15 06:41:11

标签: c++ mfc c-strings

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

尽管Str1位于'+'的右侧,但是最后一个操作是否使用CString'+'运算符重载? 感谢回答。

2 个答案:

答案 0 :(得分:1)

operator+

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

注意:不支持将两个字符串文字如下所示,因为这等同于添加两个指针。

H_all = np.array([np.gradient(i) for i in np.gradient(imgs)]).transpose(2,3,4,0,1)

答案 1 :(得分:1)

MFC / ATL CStringT类模板提供以下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;不能使用类成员,因为+表达式的左侧没有类对象,也没有用户定义的隐式转换运算符。它需要调用一个自由函数,并使用带有PCXSTR参数的重载。

请注意,这意味着您的项目已设置为使用ANSI(MBCS)编码。这通常是不希望的。通过设置适当的预处理器符号(有关详细信息,请参见Working with Strings),或通过显式使用宽字符版本(CStringW)并在字符串文字前加上一个L({ {1}}。