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

Using the value _T("") and CString variables

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

示例一:

例子二:

这样使用_T("")有什么负面影响吗?如果是,为什么?

CStringoperator overloads有不同的构造函数,是为不同的场景准备的。这是一个复杂的 class 但一般来说,这样的 class 是这样工作的:

使用默认构造函数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纳秒,否则有效。