代码之家  ›  专栏  ›  技术社区  ›  Naveen

“operator==”或“operator LPCTSTR”之间的混淆

  •  1
  • Naveen  · 技术社区  · 14 年前

    我有一小段代码:

    CString temp = _T("Temp");
    if(_T("Temp") == temp)
    {
     ....
    }
    

    现在,这里因为有一个 friend opeartor== 功能 CString 分类 operator== 正在被调用。但也有一个 operator LPCTSTR 定义为 CString公司 . 所以我的问题是为什么不使用这个运算符而不是 操作员== ? 如果我们假设没有 friend operator== 那么威尔 运算符LPCTSTR 会被使用吗?这个案子的语言规则是怎么说的?

    2 回复  |  直到 14 年前
        1
  •  4
  •   Chubsdad    14 年前

    与需要用户定义转换的运算符LPCTSTR相比,调用重载运算符==是完全匹配的。与用户定义的转换相比,首选完全匹配。

    是的,如果operator==不存在,那么下一个最佳候选(当然也是可行的)是operator LPCTSTR,它将为兼容参数调用。

        2
  •  1
  •   PlayDeezGames    14 年前

    比较LPCTSTR值对您一点好处都没有。。。比较将检查指针,并给出它们是否是相同的地址,这不是(我认为)您想要做的。因此,在没有运算符==的情况下,您正在比较指针,也就是说,您将原谅双关语,无意义。

    在operator==的情况下,有三种版本,一种是两个操作数都是CString,一种是第一个操作数是CString,另一种是第二个操作数是CString。

    如果获取CString变量并将其发送到需要LPCTSTR的函数(如OutputDebugString或其他东西),则将使用运算符LPCTSTR。