c++ - 通过 == 比较 CString 和 TCHAR?

标签 c++ string mfc string-comparison tchar

我有一个 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/charoperator== 重载。它没有在我链接到的文档中列出,但这是 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/

相关文章:

c++11:字符串文字的恒定时间查找函数

c++ - 找出调用 __fastfail 的原因

string - 解析 D 中的字符串

c++ - 如何定义迭代器类成员的类型以使用 STL 容器方法?

c++ - 从 mfc、sdi 中的对话框类访问文档文件

java - 如何在Java中打印字符串的一部分

java - 字符串变量可能尚未初始化(错误指向第 34 行)

c++ - 如何让 List Control 中的单元格有边框?

c++ - CDC::DrawText 不起作用?

c++ - 从 CString 到 char*/TCHAR* 的转换