这听起来可能很简单,但我想知道是否有一种方法实际上更有效。
一个例子:
CString strName = _T("");
CString strName = CString();
两个例子:
if (strFilterText == _T(""))
if (strFilterText.IsEmpty())
以这种方式使用_T("")
是否有负面影响?如果是,为什么?
CString
有不同的构造函数和操作符重载,是为不同的场景准备的。这是一个复杂的类,但一般来说,这样的类是这样工作的:
使用默认构造函数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纳秒,否则有效。