crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QStringRef - есть такой класс
Гость_Гость_*
сообщение 29.7.2009, 10:54
Сообщение #1





Гости








    


    QString a="122",b="123";
    
    if(a!=b)
        a="aaaa";
    if(&a!=b)
        a="bbb";

это компилируется. Зовет QStringRef
Оператор & в нелпе по QString не вижу. Описан явная функция QStringRef . Видимо (QString*)&s даст указатель.

ЗЫ А QStringRef с подсчетом ссылок? Чет пробелы в доках :unsure:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 29.7.2009, 11:06
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Я ничего не понял. Ты чего пытаешься изобразить?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 29.7.2009, 11:20
Сообщение #3





Гости








    


Цитата(SABROG @ 29.7.2009, 11:06) *
Я ничего не понял. Ты чего пытаешься изобразить?


Лишний & случайно поставил. Где в доках написано что это такое и почему компилируется?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 29.7.2009, 11:34
Сообщение #4


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


где лишний то?
Цитата(Гость_Гость_* @ 29.7.2009, 11:54) *
if(&a!=b )

если это, то это не лишний
по мне так ты указатель взял а и все. получил адрес.
можно еще приоритет операций посмотреть.

Сообщение отредактировал Litkevich Yuriy - 29.7.2009, 11:48
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 29.7.2009, 11:43
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Не указатель, а адрес (ссылку) и сравнивает её с ссылкой b. По сути идет сравнение адресов двух объектов, а не их содержимого.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 29.7.2009, 11:48
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(SABROG @ 29.7.2009, 15:43) *
сравнивает её с ссылкой b
а почему с сылкой-то?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 29.7.2009, 11:56
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Цитата(Litkevich Yuriy @ 29.7.2009, 12:48) *
Цитата(SABROG @ 29.7.2009, 15:43) *
сравнивает её с ссылкой b
а почему с сылкой-то?

Пардон. Забыл, что сравнивать ссылки нельзя. Только указатели. Значит эти операции эквивалентны:

if(&a!=b)
if(a!=&b)
if(a!=b)
if(&a!=&b)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 29.7.2009, 11:58
Сообщение #8


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


я всё же за указатель.
QString a="122", b="123";
    if(a != b ) qDebug()<<"a !=b ";
    QString* s = &a;
    if(s != b ) qDebug()<<"&a !=b ";
    qDebug()<<s;

компилится и ошибок не вызывает.
-----------------------------------------------


    
QString a="123", b="123";
    QString* s = &a;
    if(s == b ) qDebug()<<"s == b ";
    qDebug()<<s;

тут дело в
operator!= ( const QString & )
и проч.
для указателя на строку они тоже определены и так как они вызываются слева на право т.е. слева вызывающий объект а справа ссылка то получается
все равно что
if(s == b ) что if(s->operator==( b ) )
я думаю так.

Сообщение отредактировал kwisp - 29.7.2009, 12:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость_*
сообщение 29.7.2009, 20:05
Сообщение #9





Гости








    


Цитата(kwisp @ 29.7.2009, 11:58) *
для указателя на строку они тоже определены и так как они вызываются слева на право т.е. слева вызывающий объект а справа ссылка то получается

ЕМНИП они не могут быть определены для указателя - в си для первичных типов ничего нельзя определить. И на первичных типах нельзя наследовать.

Цитата(kwisp @ 29.7.2009, 11:58) *
(s->operator==( b )

Есть же отладчик в креаторе! Там конструктор QStringRef::QStringRef(const QString *aString) создается временный обьект, потом bool operator==(const QStringRef &s1,const QString &s2)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 29.7.2009, 23:18
Сообщение #10


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Гость_Гость_* @ 29.7.2009, 21:05) *
ЕМНИП они не могут быть определены для указателя - в си для первичных типов ничего нельзя определить. И на первичных типах нельзя наследовать.

да? возможно я поторопился с выводами. надо будет изучить этот вопрос:)

--------------------------------------------------------------------------------------------
да не прав. простите.
хитрый наворот с этим QStringRef

Сообщение отредактировал kwisp - 30.7.2009, 9:58
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


11 чел. читают эту тему (гостей: 11, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 4.12.2024, 0:56