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

时间:2010-11-19 12:14:11

标签: c++ winapi operators

我有一小段代码:

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

现在,由于friend opeartor==类中有CString函数,因此operator==被调用。但是operator LPCTSTR还定义了CString。所以我的问题是为什么不使用此运算符而不是operator==?如果我们暂时假设没有friend operator==,那么operator LPCTSTR会被使用吗?语言规则对此案有何评论?

2 个答案:

答案 0 :(得分:4)

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

是的,如果operator ==不在那里,那么下一个最佳候选者(当然可行的)是运算符LPCTSTR,它将被调用以获得兼容的参数。

答案 1 :(得分:1)

比较LPCTSTR值对你来说没有任何好处...比较将检查指针,并告诉你它们是否是同一个地址,这不是(我接受)你想做什么。所以,在没有operator ==的情况下,你正在比较指针,也就是说,你会原谅双关语,毫无意义。

在operator ==的情况下,有三个版本,一个操作数为CString,一个第一个操作数为CString,第三个操作数为CString。

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