我有一小段代码:
CString temp = _T("Temp");
if(_T("Temp") == temp)
{
....
}现在,由于CString类中有一个friend opeartor==函数,因此将调用operator==。但是也有一个为CString定义的operator LPCTSTR。所以我的问题是,为什么不使用这个运算符而不是operator==?如果我们暂时假设没有friend operator==,那么会使用operator LPCTSTR吗?对于这种情况,语言规则是怎么说的?
发布于 2010-11-19 20:16:12
与需要用户定义的转换的运算符LPCTSTR相比,调用重载的operator==是完全匹配的。精确匹配优先于用户定义的转换。
是的,如果operator==不在那里,那么下一个最佳候选者(当然也是可行的)是运算符LPCTSTR,它将被调用以获得兼容的参数。
发布于 2010-11-19 20:21:43
比较LPCTSTR值对您没有任何好处...比较将检查指针,并给出它们是否是相同的地址,这不是(我认为)您想要做的事情。因此,在缺少运算符==的情况下,您是在比较指针,这是没有意义的双关语。
对于运算符==,有三种版本,一种是两个操作数都是CString,一个是第一个操作数是CString,第三个是第二个操作数是CString。
如果您接受CString变量并将其发送给需要LPCTSTR的函数(如OutputDebugString等),则将使用运算符LPCTSTR。
https://stackoverflow.com/questions/4224843
复制相似问题