CString Str1 = "ABC";
CString Str2 = Str1 + "123"; // Understandable
CString Str3 = "123" + Str1; // How does it work? Is there data overriding?
尽管Str1位于'+'的右侧,但是最后一个操作是否使用CString'+'运算符重载? 感谢回答。
答案 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}}。