Russian Qt Forum
Июнь 11, 2024, 11:23 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QMap::lowerBound()  (Прочитано 2192 раз)
0...-5
Гость
« : Август 20, 2012, 22:36 »

Здравствуйте!
Наткнулся на некоторую странность. Есть контейнер вида QMap<float, MyClass> container. При попытке получить итератор вызовом
Код:
QMap<float, MyClass>::const_iterator i = container.lowerBound(float value)
Получаю предупреждение:
"'update' may be used uninitialized in this function". Подобное предупреждение получаю только для релизной сборки. Если заменить lowerBound() на find() или upperBound() warning исчезает.
P.S: переменная update относится к внутренней реализации QMap:
Код:
template <class Key, class T>
Q_INLINE_TEMPLATE typename QMap<Key, T>::const_iterator
QMap<Key, T>::lowerBound(const Key &akey) const
{
    QMapData::Node *update[QMapData::LastLevel + 1];
    mutableFindNode(update, akey);
    return const_iterator(update[0]->forward[0]);
}
Сталкивался ли кто-нибудь с подобными вещами?
Записан
andrew.k
Гость
« Ответ #1 : Август 21, 2012, 15:30 »

Странно, на upperBound тоже должен ругаться.
Вполне адекватный ворнинг компилятора:
Код
C++ (Qt)
template <class Key, class T>
Q_OUTOFLINE_TEMPLATE QMapData::Node *QMap<Key, T>::mutableFindNode(QMapData::Node *aupdate[],
                                                                  const Key &akey) const
{
   QMapData::Node *cur = e;
   QMapData::Node *next = e;
 
   for (int i = d->topLevel; i >= 0; i--) {
       while ((next = cur->forward[i]) != e && qMapLessThanKey<Key>(concrete(next)->key, akey))
           cur = next;
       aupdate[i] = cur;
   }
   if (next != e && !qMapLessThanKey<Key>(akey, concrete(next)->key)) {
       return next;
   } else {
       return e;
   }
}
 

Кто-то поленился его убрать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.06 секунд. Запросов: 17.