Путаница между оператором == или оператором LPCTSTR - PullRequest
1 голос
/ 19 ноября 2010

У меня есть небольшой фрагмент кода:

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

Теперь, поскольку в классе CString есть функция friend opeartor==, вызывается operator==.Но есть также operator LPCTSTR, определенный для CString.Поэтому мой вопрос: почему этот оператор не используется вместо operator==?Если на мгновение, если мы предположим, что нет friend operator==, будет ли использоваться operator LPCTSTR?что языковые правила говорят об этом случае?

Ответы [ 2 ]

4 голосов
/ 19 ноября 2010

Вызов перегруженного оператора == является точным совпадением по сравнению с оператором LPCTSTR, который требует преобразования, определенного пользователем.Точное совпадение предпочтительнее, чем пользовательское преобразование.

Да, если оператора == нет, то следующим лучшим кандидатом (и, конечно, жизнеспособным) является оператор LPCTSTR, который будет вызываться для совместимых аргументов.

1 голос
/ 19 ноября 2010

Сравнение значений LPCTSTR не принесет вам никакой пользы ... сравнение проверит указатели и покажет, являются ли они одним и тем же адресом, что не является (я так понимаю) тем, что вы хотите сделать. Итак, в отсутствие оператора == вы сравниваете указатели, то есть, простите за каламбур, бессмысленно.

В случае оператора == существует три версии: одна с обоими операндами, представляющими собой CString, одна с первым операндом, представляющим собой CString, а третья с вторым операндом, представляющим собой CString.

Оператор LPCTSTR будет использоваться, если вы возьмете переменную CString и отправите ее в функцию, требующую LPCTSTR, например, OutputDebugString или что-то в этом роде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...