Неявное преобразование между RWCString и const char * - PullRequest
0 голосов
/ 12 января 2011
RWCString str = "Y";
str.append("ES");
if("YES" == str)
    cout << "YES == str" << endl;
if(str == "YES")
    cout << "str == YES" << endl;

Как происходит неявное преобразование в обоих случаях?Какой из них безопасен в использовании?RWCString - строковый класс, конструктор которого принимает const char * и оператор преобразования в const char *

1 Ответ

0 голосов
/ 12 января 2011

Весьма вероятно, что == перегружен для сравнения между const char* и RWCString.

В противном случае либо str преобразуется в const char *, либо вызовы неоднозначны:

str == "YES" является неоднозначным, если есть внешний элемент или элемент operator==, сравнивающий два RWCString s.

"YES" == str является неоднозначным, если есть внешнее operator==, сравнивающее два RWCString с.

(при условии, что аргументы operator== передаются нормально - либо через копию, либо через ссылку const).

...