我有一小段代码:
CString temp = _T("Temp");
if(_T("Temp") == temp)
{
....
}
现在,由于friend opeartor==
类中有CString
函数,因此operator==
被调用。但是operator LPCTSTR
还定义了CString
。所以我的问题是为什么不使用此运算符而不是operator==
?如果我们暂时假设没有friend operator==
,那么operator LPCTSTR
会被使用吗?语言规则对此案有何评论?
答案 0 :(得分:4)
与需要用户定义转换的运算符LPCTSTR相比,调用重载运算符==是完全匹配。与用户定义的转换相比,首选完全匹配。
是的,如果operator ==不在那里,那么下一个最佳候选者(当然可行的)是运算符LPCTSTR,它将被调用以获得兼容的参数。
答案 1 :(得分:1)
比较LPCTSTR值对你来说没有任何好处...比较将检查指针,并告诉你它们是否是同一个地址,这不是(我接受)你想做什么。所以,在没有operator ==的情况下,你正在比较指针,也就是说,你会原谅双关语,毫无意义。
在operator ==的情况下,有三个版本,一个操作数为CString,一个第一个操作数为CString,第三个操作数为CString。
如果您获取CString变量并将其发送到需要LPCTSTR的函数(如OutputDebugString或其他内容),将使用运算符LPCTSTR。