c++ - MFC CString 构造函数操作

标签 c++ mfc c-strings

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

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

最佳答案

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) 编码。这通常是不可取的。请改用 Unicode,方法是设置适当的预处理器符号(有关详细信息,请参阅 Working with Strings),或者显式使用宽字符版本 (CStringW) 并在字符串文字前面添加 L(L“123”)。

关于c++ - MFC CString 构造函数操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53313783/

相关文章:

c++ - 比较 float 的相等计算输出

c++ - 在 OpenGL 中。如何将纹理的一部分复制到另一个纹理

c++ - 创建具有专业外观(和行为!)的表单设计器

c++ - 如何更改菜单文本

c++ - 在 MFC 6.0 中构建 MFC 4.1 项目时出错

c - Tokenizer 只打印第一个标记

c++ - 不同位数平台上 int_fastN_t 的正确位数是多少?

python - 如何修复 python 3.7 中软件包安装 (fcm) 期间的 gcc 错误

c++ - 从 char 数组转换/提取整数

C++ - 截断变量文件名中 double 的小数位