我有一个 CString 指针,它通过以下方式与 TCHAR 进行比较:
if(srtTest[i] == _T('\n'))
//do something
其中 strTest 是一个 CString* strTest;
考虑到它不是 TCHAR 指针,我只是想知道这是否正确。它编译确定。 这段代码非常古老,似乎没有人提示过它,不过这让我感到奇怪。
最佳答案
是的,没关系(假设 strTest
是一个有效的指针并且 i
是一个有效的索引)。因为 strTest
是一个 CString*
,所以 strTest[i]
是一个 CString
。还有一个免费的 operator==
重载,它接受一个 const CString&
作为 param1 和一个 LPCTSTR
作为 param2 然后做你期望的.
MSDN 文档是 here .第二个重载是重要的:
BOOL operator ==( const CString& s1, LPCTSTR s2 );
(文档已经过时,我追查实际代码时看到的签名不一样,但是效果是一样的)
MarkRansom 提醒我您的代码将 strTest[i]
与字符而不是字符串进行比较。这仍然没问题,因为还有一个采用 CString
/char
的 operator==
重载。它没有在我链接到的文档中列出,但这是 VS2012 版本中实际代码的样子:
friend bool operator==(
_In_ const CStringT& str1,
_In_ XCHAR ch2) throw()
{
return( (str1.GetLength() == 1) && (str1[0] == ch2) );
}
由于未在过时的文档中列出,因此推测该功能并不总是存在。但是,CString
有一个采用TCHAR
的隐式构造函数。我假设在早于上述版本的 VC++ 版本中,CString
将从 _T('\n')
隐式构造,然后用于调用 CString
/CString
重载 operator==
。
关于c++ - 通过 == 比较 CString 和 TCHAR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25768532/