2011-01-12 2 views
0
RWCString str = "Y"; 
str.append("ES"); 
if("YES" == str) 
    cout << "YES == str" << endl; 
if(str == "YES") 
    cout << "str == YES" << endl; 

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

+0

Я думаю, что временный тип 'RWCString' построен из строки' const char * '. Это скорее произойдет из-за этого: 'RWCString str =" Y ";'. – AraK

+0

Почему вы используете стороннюю строковую библиотеку вместо 'std :: string', точно? –

+0

Im работает над существующим кодом, который использует эту библиотеку. Я наткнулся на эту линию и задаюсь вопросом, будет ли это работать всегда. – balki

ответ

0

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

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

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

"YES" == str неопределенный если есть внешний operator== сравнение 2 RWCString s.

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

+0

@ashot: в вопросе говорится, что есть преобразование в 'const char *' (последнее предложение вопроса), поэтому я думаю, ответ да. – lijie

+0

@liijie вы уверены, что RWCString может неявно преобразовывать в const char *? Becouse Если он не может и const char * может неявно преобразовывать в RWCSTRing, чем я не вижу двусмысленного? – UmmaGumma

+0

@liijie OK, моя ошибка :) – UmmaGumma

Смежные вопросы