使用值 _T( " " ) 和 CString 变量



这听起来可能很简单,但我想知道是否有一种方法实际上更有效。

一个例子:

  • 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纳秒,否则有效。

相关内容

  • 没有找到相关文章

最新更新