Название: [РЕШЕНО]QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 26, 2010, 12:39 Почему следующий код работает?
Код: static const char a[]="aaa"; Название: Re: QLatin1String operator+ Отправлено: Авварон от Май 26, 2010, 13:00 зато есть QString::QString ( const QLatin1String & str ) можен он срабатывает?
Название: Re: QLatin1String operator+ Отправлено: zenden от Май 26, 2010, 13:20 Срабатывает глобальный оператор+
Код
Название: Re: QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 26, 2010, 13:32 Но QString - это один класс, а QLatin1String - другой. Если бы там было что-то типа
Код: const QString operator+ ( const QLatin1String & s1, const QLatin1String & s2 ) Код: QString & QString::operator= ( const QLatin1String & str ) Название: Re: QLatin1String operator+ Отправлено: Amigo_sa от Май 26, 2010, 13:45 Если куте собрана в дебаге, то можно пропробовать в отладчике посмотреть какой оператор выполняется...
Название: Re: QLatin1String operator+ Отправлено: zenden от Май 26, 2010, 13:52 Amigo_sa
ну на то у С++ и самые сложные компиляторы среди ЯП, чтобы решать подобные задачки. Вас ведь не удивляет то, что вы можете в любую функцию, вместо QString передать QLatin1String ? Компилятор ищет тот operator+, который может принять оба аргумента (с учетом приведения типов) Название: Re: QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 26, 2010, 14:00 Amigo_sa Все-таки компилятор C++ это не некий черный ящик который что-то прикидывает и куда-то что-то запихивает. Есть стандарт ISO/IEC 14882:2003 Programming Language C++.ну на то у С++ и самые сложные компиляторы среди ЯП, чтобы решать подобные задачки. Вас ведь не удивляет то, что вы можете в любую функцию, вместо QString передать QLatin1String ? Компилятор ищет тот operator+, который может принять оба аргумента (с учетом приведения типов) Насколько я понял ответ на мой вопрос лежит в классе QStringBuilder Название: Re: QLatin1String operator+ Отправлено: Amigo_sa от Май 26, 2010, 14:07 Amigo_sa Знать бы еще какие operator+ вообще существуют ;Dну на то у С++ и самые сложные компиляторы среди ЯП, чтобы решать подобные задачки. Вас ведь не удивляет то, что вы можете в любую функцию, вместо QString передать QLatin1String ? Компилятор ищет тот operator+, который может принять оба аргумента (с учетом приведения типов) Название: Re: QLatin1String operator+ Отправлено: zenden от Май 26, 2010, 14:12 QStringBuilder тут не причем. Пишем тестовый класс, и определим в нем только оператор QString. Заметьте, оператора+ в классе нет. А результат тот же.
Код
А насчет перебора... вот скрин (http://i.imgur.com/mcsGS.png) (http://i.imgur.com/c3aVm.png) Название: Re: QLatin1String operator+ Отправлено: Авварон от Май 26, 2010, 15:39 Код: qDebug() << typeid(QLatin1String("hello ") + QLatin1String("world")).name(); 7QString /Users/arch/cpp/Qt4/xxx завершился с кодом 0 Название: Re: QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 26, 2010, 18:48 QStringBuilder тут не причем. Пишем тестовый класс, и определим в нем только оператор QString. Заметьте, оператора+ в классе нет. А результат тот же. С вашим примером все понятно. Но QLatin1String не возвращает QString. Так что пример немного не о том.Название: Re: QLatin1String operator+ Отправлено: Alex Custov от Май 26, 2010, 19:13 Amigo_sa Вас ведь не удивляет то, что вы можете в любую функцию, вместо QString передать QLatin1String ? Это потому что есть конструктор QString(QLatin1String). Название: Re: QLatin1String operator+ Отправлено: ритт от Май 26, 2010, 19:17 зато есть QString::QString ( const QLatin1String & str ) ... Название: Re: QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 27, 2010, 09:27 Если дело в конструкторе, как вы говорите, который может принимать QLatin1String. То код на подобии
Код: B(); error: no match for 'operator+' in 'a1 + a2' Да и глупо было бы если бы такой код заработал. Есть класс B::B(const A &aaa), потом сочинили еще класс С::С(const A &aaa) и D::D(const A &aaa) и в объект какого класса неявно преобразовать объект класса A? Если я где-то неправ, то исправьте мой пример так, чтобы он повел себя как Qt-шный класс QLatin1String. Название: Re: QLatin1String operator+ Отправлено: Авварон от Май 27, 2010, 11:20 прочти внимательно пост номер 9. Ты можешь конечно поспорить с компилятором, но он свято считает что тип суммы - QString (о чем и говорит typeid(...).name())
Название: Re: QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 27, 2010, 12:18 прочти внимательно пост номер 9. Ты можешь конечно поспорить с компилятором, но он свято считает что тип суммы - QString (о чем и говорит typeid(...).name()) С компилятором и вами я полностью согласен. Оператор сложения возвращает QString. Но то, что это происходит из-за QString ( const QLatin1String & str ) без дополнительного шаманства я не согласен. Я привел тривиальный класс который имеет оператор сложения и конструктор , принимающий ссылку на другой класс. Это не делает чуда и объекты другого класса складываться не начинают.Название: Re: QLatin1String operator+ Отправлено: Авварон от Май 27, 2010, 12:58 учите с++ (с)
Код: class A Название: [Решено]Re: QLatin1String operator+ Отправлено: Sancho_s_rancho от Май 27, 2010, 13:17 Спасибо, разобрался.
|