使用值 _T("") 和 CString 变量
Using the value _T("") and CString variables
这听起来很简单,但我想知道是否有一种方法实际上更有效。
示例一:
CString strName = _T("");
CString strName = CString();
例子二:
if (strFilterText == _T(""))
if (strFilterText.IsEmpty())
这样使用_T("")
有什么负面影响吗?如果是,为什么?
CString
和operator 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纳秒,否则有效。
这听起来很简单,但我想知道是否有一种方法实际上更有效。
示例一:
CString strName = _T("");
CString strName = CString();
例子二:
if (strFilterText == _T(""))
if (strFilterText.IsEmpty())
这样使用_T("")
有什么负面影响吗?如果是,为什么?
CString
和operator 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纳秒,否则有效。