CString和operator overloads有不同的构造函数,是为不同的场景准备的。这是一个复杂的类,但一般来说,这样的类是这样工作的:
使用默认构造函数CString()(初始化为_T("")):
CString s1 = CString();
CString s2; //same as above, shortcut
CString s3{}; //same as above
CString s4 = {}; //same as above
使用复制构造函数CString(const CString& src):
const CString src = _T("");
CString s1 = CString(src);
CString s2 = src; //same as above
CString s3 = { src}; //same as above
CString s4(src); //same as above
使用不同的构造函数CString(const TCHAR* src):
const TCHAR* src = _T("");
CString s1 = CString(src);
CString s2 = src; //same as above
CString s3 = { src }; //same as above
CString s4(src); //same as above
CString 还支持= 赋值运算符:
CString s;
s = _T(""); //uses `=` assignment operator
s = CString(); //uses default constructor for right side,
//calls `=` assignment operator for left side.
== 运算符重载可以使用CString::Compare 来比较两侧。所以
if (s == _T(""))与if (s.Compare(_T("")) == 0)相同,可能比s.IsEmpty()慢1纳秒,否则有效。